1、多线程之多个生产者、消费者交替运行案例
1、生产者、消费者实体类(分别无限设置和输出字段值)
多线程总结(下)
2、测试main方法,同时开启2个生产者、2个消费者线程用同一把锁resource
哪个多线程总结(下)
3、resource类多线程同步方法编写细节
设计思路:生产者和消费者轮流执行,根据flag进行判断哪个执行。共同的锁this当前对象,notify()方法一般是唤醒线程池中先进入的线程。notifyAll()方法是唤醒全部线程。
多线程总结(下)
2、上边的程序jdk1.5升级版
多线程总结(下)
resource类多线程同步方法编写细节
主要区别就是:用了jdk1.5新方法Lock锁,并且可以根据同一个lock锁获得多个condition对象,分别代表不同的线程,在上面的程序中用到了notityAll()方法唤醒全部线程,这里就更精准用不同的condition对象调用await()、signal()方法控制唤醒、等待不同的线程。实现了轮流线程运行。
多线程总结(下)
生产者类:不断设置
多线程总结(下)
消费者类:循环输出
多线程总结(下)
main方法测试类
多线程总结(下)
3、停止多线程的方法
查看api发现stop()等停止线程的方法都已经过时了。Thread类提供了interrupt()方法。interrupt方法不仅可以清除wait方法还可以清除sleep、join方法
多线程总结(下)
多线程总结(下)
测试类:在while循环中控制,当if中num=60时,t1、t2清除冻结状态,强制恢复到运行状态来,但是会收到一个InterruptedException ,并且修改flag的值,使得线程停止运行。
多线程总结(下)
4、守护线程
setDaemon方法:将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java虚拟机退出。
stopThread类:无限循环输出。
多线程总结(下)
测试类:同时开启2个线程并在main方法中执行一个线程,当main中的while循环结束后,只剩下t1\t1循环,关键点,在线程start()方法之前调用setDaemon(true)方法。这个时候这2个线程就都是守护线程了,Java虚拟机退出运行。
多线程总结(下)
5、join方法
方法介绍:
多线程总结(下)
demo类:循环输出
多线程总结(下)
测试类:t1、t2同时执行,然后调用t1的join方法,这个时候其他线程全部等待状态,只有t1运行,t1运行结束,别的线程才开始继续运行。
多线程总结(下)
6、线程的一些方法toString(),setPriority(),yield()

setPriority():设置线程的优先级
MAX_PRIORITY():10,线程可以具有的最高优先级。
MIN_PRIORITY():1,线程可以具有的最低优先级。
NORM_PRIORITY():5,线程可以具有的默认优先级。

toString():返回此线程的字符串表示,包括线程的名称,优先级和线程组。
yield():暂停当前正在执行的线程对象,并执行其他线程。
下面是yield方法的一个小例子,当测试类种同时开启2个线程任务运行上百年for循环里边的内容时,会导致t1停一下让t2执行,t2停一下让t1执行的现象。让线程执行的更均衡
多线程总结(下)
多线程使用的场景:需要多条代码同时执行的时候使用

相关文章: