
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
多线程编程开发是程序员在学习java编程开发语言的时候需要重点掌握的一个编程方式,下面我们就通过案例分析来了解一下,多线程编程开发基础知识分享。
一.一个Java程序少开几个线程?
3个:主线程;gc线程;异常处理线程
二.线程的生命周期以及状态?
阻塞的分类:
等待阻塞:执行wait(),需要notify()/notifyAll()唤醒
同步阻塞:等待拿到锁
其他阻塞:执行sleep(),join(),或者发出I/O请求。都会进入阻塞
三.创建线程的几种方式?
创建线程:
创建一个Thread对象。newThread().start;
使用线程池Executors.newFixedThreadPool(10);//创建线程池
定义线程做的事
继承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:没有
补充:解释上面出现的名词
锁池:需要竞争同步锁的线程都先放在锁池中,锁一旦释放,锁池中的线程开始抢锁
等待池:当线程执行wait(),就会进入等待池中。执行notify()/notifyAll()就会将等待池中的线程放到锁池中(也就是唤醒)
yield和join
yield():线程让步
暂停当前正在执行的线程对象,并执行其它线程。不进入阻塞
当前线程交出cpu权限,让cpu执行其他线程(但是CPU可能重新分配时,再次执行该线程)
join():线程插入
在线程a中调用线程b的join(),此时线程a进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。