函数执行完成后,必须使用条件变量启动方法中阻止的所有线程(如果要让线程进入可运行状态,可以调用的方法是)

并发编程中最常见的需求是启动线程并运行函数来实现需求,但在这种需求中,往往需要返回到函数值。例如,我们需要同一个非常大的数组中的数据之和,让每个线程求出某个区间的内部之和,最终将这些之和相加,每个线程都需要返回相应区间之和。Java提供了实现此效果的机制—。

你自己写之前,先写个例子。

写入类实现接口。

如果实现了接口就可以实现,你会发现这个函数有一个返回值,但是我们返回的值就是这个函数的返回值。

对象以及最初编写的类。

将最后获得的对象取入类中,启动线程即可。

而且我们可以调用的方法可以得到返回的结果。

如果有100000长数组,则当前有10个线程,第一个线程将求数组中所有数据的总和,并将10个线程的结果相加。

可能会对使用方法感到困惑,也可能不太明白,现在开始好好思考一下吧。

您可以首先启动线程、从类继承、重写类方法、将实现的类对象传递给类,当然也可以在匿名内部类中实现。

既然我们的对象可以传递给类,那么毫无疑问接口已经实现了。看看我们现在看到的继承系统。

函数执行完成后,必须使用条件变量启动方法中阻止的所有线程(如果要让线程进入可运行状态,可以调用的方法是) 热门话题

可以发现的确实实现了接口,同时实现了接口,这个接口主要提供了后来我们使用的一系列函数。

[新闻搜索]

现在,您应该可以粗略地考虑,在中的方法可以调用其中实现的方法,保存结果,并在调用方法时返回结果。

经过上述分析,你可能已经知道了大致了解的大致执行过程,但是如果你执行的方法可能被屏蔽了,可能的方法还没有执行,所以要注意。因此,方法需要阻止线程的代码,但是在方法执行完成后,必须启动所有这些线程。

这篇文章使用锁定和条件变量阻止和启动线程。在我们自己动手之前,让我们熟悉一下上述两种工具的使用方法。

主要有两种方法。

锁定临界区域代码块。

解锁关键区域代码。

主要有三种方法。

阻止调用此方法的线程,并等待其他线程启动。

启动方法阻止的线程。

启动方法阻止的所有线程。

上面的代码输出:

上述实施原理主要包括:。

构造函数必须输入实现接口的类对象。这将在一个方法中执行,获取函数的返回值并存储返回值。

如果线程调用方法,则如果此时执行已完成,则可以直接返回函数返回的结果。如果函数未运行,则必须挂起调用该方法的线程。您可以在此处挂起线程。

执行完函数后,必须启动方法暂停的线程并继续执行。在这里,启动所有暂停的线程。

我们自己实现的,功能不是很齐全。如果能满足我们的主要需求,主要有助于我们理解原理。

实施代码包括:。

我们现在用我们自己写的东西来实现上述排列的总和。

这篇文章主要介绍内部原理,以及我们自己使用和实现的东西。本报道的主要内容如下。

的内部原理:

首先继承接口,可以将对象直接放入类中作为构造函数的参数。

我们在使用时输入实现类的对象,在函数中实现我们必须执行的函数,执行完成后,保存函数的返回值,返回有线程调用方法时保存的返回值。

使用条件变量阻止和启动线程。

如果有线程调用方法,则如果执行已完成,则可以直接返回结果。否则,必须使用条件变量暂停线程。

函数执行完成后,必须使用条件变量启动方法中阻止的所有线程。

双重检查:

我们在方法中首先判断是否为空,如果不是空的话可以直接返回结果,这样就不需要对资源进行竞争锁定,可以提高程序执行的效率。

但是,在使用锁定保护临界区域中,如果最初确定线程为空,则可能在该时刻被挂起以获取锁定,在挂起期间呼叫可能已完成,如果此时不进行判断而执行await方法后面的线程将无法启动,因此需要进行判断。由于在函数执行完成后调用,如果线程随后执行该方法,则将来不会有线程启动这些线程。


1e

发表评论

Copyright 2002-2022 by 瑞爱特暖气片官网(琼ICP备2022001899号-3).All Rights Reserved.