并发编程处理实战篇8:线程方法join()和sleep()区别

news/2024/5/17 18:18:07 标签: join, sleep, synchronized, interrupt

描述:

方法join()的作用是使所属的线程对象x正常执行run()方法,而使当前线程z进行无限期的阻塞,等待线程x销毁后再继续执行当前现在z后面的代码。

join还有join(long)方法,即:long为设置等待的时间,

 

1、join()与synchronized

join()方法具有使线程排队运行的作用,有些类似synchronized

synchronized的区别是:查看源码可以看到join方法在内部使用了wait()方法进行等待,而synchronized使用的是对象监视器原理实现同步。


2、join()与sleep()
线程除了join方法之外还有sleep(long)方法也是可以实现等待;
sleep()的区别是:由于join的内部实现是wait(),所以使用join()方法是会释放锁的,那么其他线程就可以调用此线程的同步方法了,
sleep(long)方法具有不是放锁的特点,因此线程会一直等待下去,直到任务完成,才会释放锁。

 

 

注:join()方法如果遇到线程的interrupt()方法有可能会出现出现异常,例如:A线程等待B线程执行任务,B线程执行到一半之后interrupt()了,此时会报 java.lang.InterruptedException异常。

此时A线程并不会终止,还是处于正常运行状态。

 


http://www.niftyadmin.cn/n/1554984.html

相关文章

白盒基本路径发测试实验报告_【测试基础】白盒测试之循环路径测试

从是否关注程序内部的结构的角度出发可以测试类型划分为:白盒测试、黑盒测试和灰盒测试,黑盒测试不关注程序内部的实现结构,仅仅是通过向程序进行输入来观察程序的输出对不对;白盒测试就需要关注程序内部的实现结构,对…

并发编程处理实战篇9:线程本地变量ThreadLocal

PS: 关于多线程共享变量ThreadLocal<T> 变量值的共享可以使用public static 变量的形式,所有的线程都可以使用同一个public static变量。如果想实现每一个线程都有自己的共享变量,如何实现? JDK中提供了类ThreadLocal<T>可以解决这样的问题。原理: ThreadL…

python编写一个函数计算n的阶乘_python编写阶乘 python没有自己算阶乘的函数吗

css如何实现鼠标移至图片上显示遮罩层及文字 Python整数阶乘组合计算 整数阶乘组合计算 描述 给定正整数n、a&#xff0c;CSS布局HTML小编今天和大家分享最大的k&#xff0c;使n。可以被a^k整除n,aeval(input()) s1 for i in range(1,n1): ss*i for k in range(1,n): aka**k aj…

qtablewidget 复选框选中_PyQt的:复选框在QTableWidget的

的一种方式将是&#xff1a;表的​​信号连接到处理器测试被点击项目的checkedState在处理器如果项目被选中&#xff0c;则将其row添加到li ST示例代码&#xff1a;from PyQt4 import QtGui, QtCoreclass Window(QtGui.QWidget):def __init__(self, rows, columns):QtGui.QWidg…

并发编程处理实战篇10:线程组使用

线程组 可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程对象,组中可以有线程,这样线程组可以类似树形。 线程组的使用主要是方便线程的管理维护操作: 示例 (通过线程组的方式组织多个线程并且批量停止所有线程): 1、创建线程A和B public c…

python人工智能方向面试准备_人工智能面试题分享(含答案)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1、深度学习框架TensorFlow中有哪四种常用交叉熵&#xff1f; 答&#xff1a; tf.nn.weighted_cross_entropy_with_logits tf.nn.sigmoid_cross_entropy_with_logits tf.nn.softmax_cross_entropy_with_logits tf.nn.sparse_softm…

并发编程处理实战篇11:关于程序性能优化的方向

程序性能调优 ------------------------------------------------------------ 1、性能调优层次 a.设计调优; b.代码调优; c.jvm调优&#xff08;如&#xff1a;java&#xff09;; d.数据库调优; e.操作系统调优;2、常用优化组件和方法 a.缓冲; b.缓存; c.对象复用-"池…

python中itemgetter_python中的operator.itemgetter函数

operator模块提供的itemgetter函数用于获取对象的哪些维的数据&#xff0c;参数为一些序号。看下面的例子 a [1,2,3] >>> boperator.itemgetter(1) //定义函数b&#xff0c;获取对象的第1个域的值 >>> b(a) 2 >>> boperator.itemgetter(1,0) //定义…