signal signalAll 的区别是:condition的signal是将等待队列中的first节点放入同步队列,并通过调用unpark方法来唤醒线程。signalAll就是signal的while循环,将所有等待队列中的node放入同步队列,并逐一唤醒。线程被唤醒之后,还是需要去尝试获得锁,如果获得锁失败,则继续阻塞。
java中提供了signal的机制。在sun.misc包下,属于非标准包。重要涉及到两个类:Signal和SignalHandler。其中Signal主要使用了静态方法Signal.handle(Signal, SignalHandler),而SignalHandler是一个接口。
你可以在SignalHandler的现实中添加你需要的处理逻辑。比如kill -2是终端应用,那就在SignalHandler的实现中编写如何终端该应用的代码。
sig是传递给它的少数参数。执行了signal()调用后,进程只要接收到类型为sig的信号,不管其正在执行程序的哪一部分,就立即执行func()函数。当func()函数执行结束后,控制权返回进程被中断的那一点继续执行。
signal signalAll 的区别是:condition的signal是将等待队列中的first节点放入同步队列,并通过调用unpark方法来唤醒线程。signalAll就是signal的while循环,将所有等待队列中的node放入同步队列,并逐一唤醒。线程被唤醒之后,还是需要去尝试获得锁,如果获得锁失败,则继续阻塞。
细节上来说,await就是加入AQS的内部conditionObject实现类的等待队列里,signal就是唤醒该队列的名列前茅个线程节点,signalAll是唤醒队列里所有的线程节点。
延伸阅读:
什么是JAVA?
Java programming language具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的”形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种”以对象为导向”的方式。使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。
Java是Sun微系统公司在1995年推出的,推出之后马上给互联网的交互式应用带来了新面貌。最常用的两种互联网浏览器软件中都包括一个Java虚拟机。几乎所有的操作系统中都增添了Java编译程序。
使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。
文章标题:signal signalAll 的区别是啥,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37361