
Java多线程之wait和notify
发布日期:2021-05-27 02:54:00
浏览次数:3
分类:技术文章
本文共 1885 字,大约阅读时间需要 6 分钟。
问题描述:有4个线程和1个公共的字符数组。线程1的功能就是向数组输出A,线程2的功能就是向字符输出B,线程3的功能就是向数组输出C,线程4的功能就是向数组输出D。要求按顺序向数组赋值ABCDABCDABCD,ABCD的个数由线程函数1的参数指定。
本文通过wait和notify实现、sleep、CountDownLatch实现。
wait():等待,如果线程执行了wait方法,那么该线程会进入等待的状态,等待状态下的线程必须要被其他线程调用notify()方法才能唤醒。
notify():唤醒,唤醒线程池等待线程其中的一个。 notifyAll():唤醒线程池所有等待线程。wait与notify方法要注意的事项:
- wait方法与notify方法是属于Object对象的。
- wait方法与notify方法必须要在同步代码块或者是同步函数中才能使用。
- wait方法与notify方法必须要由所对象调用。
wait和notify实现代码示例:
public class ThreadABCDTest extends Thread { private static String rs; private static Lock lock = new ReentrantLock(); private static int state = 0; private static Object objLock = new Object();//主线程等待子线程的同步唤醒 public static String multiThreadWrite(final int times) { rs = new String(); Thread threadA = new Thread() { public void run(){ int count = 0; while(count
sleep代码示例:
public class ThreadABCD2 extends Thread{ private static String result ; private static Lock lock = new ReentrantLock(); private static int state = 0; public static String multiThreadWrite(final int times) { result = new String(); Thread threadA = new Thread() { public void run(){ int count = 0; while(count
CountDownLatch代码示例:
public class ThreadABCD extends Thread{ private static String result ; private static Lock lock = new ReentrantLock(); private static int state = 0; //static boolean flag; private static final CountDownLatch latch = new CountDownLatch(4); public static String multiThreadWrite(final int times) { result = new String(); //flag = false; Thread threadA = new Thread() { public void run(){ int count = 0; while(count
以上三种方式的结果一样,结果如下:
ABCDABCDProcess finished with exit code 0
转载地址:https://blog.csdn.net/leijie0322/article/details/109309008 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2023年11月16日 22时15分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PCL实现区域增长算法(代码详细解析)
2019-03-28
C/C++常用函数总结以及在ubuntu和vs中运行
2019-03-28
基于tensorflow的一元线性回归详细讲解
2019-03-28
tensorflow简单二维分类 simple_classification
2019-03-28
tensorflow的CNN
2019-03-28
tensorflow的regress(超详细教程)
2019-03-28
tensorflow的dropout 防止过拟合
2019-03-28
PCL包围盒(详细介绍)
2019-03-28
c++调用函数,返回字符串数组
2019-03-28
点云常见几种算法(详细教程)
2019-03-28
UG10.0快速配置环境
2019-03-28
OBB包围盒碰撞检测算法验证
2019-03-28
tensorflow的RNN(递归神经网络)
2019-03-28
Python-Tkinter图形化界面设计(详细教程 )
2019-03-28
CSDN页面内跳转测试
2019-03-28
MDK查找替换
2019-03-28
Tkinter登陆界面设计
2019-03-28
C++将字符串存到数组中
2019-03-28
C++将两个字符串合并在一起
2019-03-28
CV2模块使用(详细教程)
2019-03-28