一.一个Java程序最少开几个线程?
阻塞的分类:
创建线程:
定义线程做的事
继承Thread类,重写run()
需要创建一个子类
实现Runnable接口,重写run()
打破单继承的局限,可以在实现接口的时候继承自己的父类。
可以使用lambda代替 ()->{}
实现Callable接口,重写call()
有返回值,有异常
需要用一个过度类FutureTask,可以使用该类的get()获取返回值
四.sleep,wait,yield,join的区别
sleep(),wait()的区别?
所属的类不同:sleep来自Thread类,wait来自Object类
有没有释放锁(释放资源)
sleep:不释放 wait:释放,进入等待池中(主要就是为了线程的通讯)
使用的范围不同
sleep:任何地方 wait:必须使用在同步代码块/同步方法中
是否有异常
sleep:有,需要捕获 wait:没有
补充:解释上面出现的名词
yield和join
yield():线程让步
暂停当前正在执行的线程对象,并执行其它线程。不进入阻塞
当前线程交出cpu权限,让cpu执行其他线程(但是CPU可能重新分配时,再次执行该线程)
join():线程插入
在线程a中调用线程b的join(),此时线程a进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态。
五.其他一些小问题
怎么理解线程安全问题?
并发,并行,串行的区别?
守护线程?
java中两种线程:守护线程(后台线程) 非守护线程(用户线程)
线程终止的几种方式?
Interrupt()方法结束线程 while (!isInterrupted()){..Thread.sleep().} 推荐
Interrupt():如果线程处于阻塞状态,终止阻塞。抛出异常。然后在异常处理中break;
stop()方法结束线程 不推荐
强制终止线程,释放该线程的所有的锁。这样做就会导致锁释放,造成线程不安全。
线程是否越多越好? 不一定,线程多了上下文切换就多了
寄语:把努力当成你的一种习惯,而不是一时热血
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.cnblogs.com/monkey-xuan/p/15864363.html
内容来源于网络,如有侵权,请联系作者删除!