Java多线程4
??????????????????????????????????? ??synchronized????????????????????synchronized???????????????? Lock???????????????????????? Condition?????? ??????? ??????? ????????????
发布日期:2021-04-30 21:05:56
浏览次数:99
分类:精选文章
本文共 5692 字,大约阅读时间需要 18 分钟。
Java???4??????????
?Java???????????????????????????????????????????????????????????????????????????????????????
????????????
??????????????????????????????????????????????????????????????????????????????????
?????
??????????????????????????????????????????????
public class ZiYuan { private Object object[] = new Object[1]; private int num = 1; private static final Object loc = new Object(); public void add() { synchronized (loc) { while (object[0] != null) { loc.wait(); } object[0] = "?" + num; System.out.println(Thread.currentThread().getName() + "????????" + object[0]); num++; loc.notifyAll(); } } public void delete() { synchronized (loc) { while (object[0] == null) { loc.wait(); } System.out.println(Thread.currentThread().getName() + "??????" + object[0]); object[0] = null; loc.notifyAll(); } }} ?????
???????????????????????????????
public class ShengChan implements Runnable { private ZiYuan ziyuan; public ShengChan(ZiYuan ziYuan) { this.ziyuan = ziYuan; } @Override public void run() { while (true) { try { ziYuan.add(); } catch (InterruptedException e) { e.printStackTrace(); } } }} ?????
???????????????????????????????
public class XiaoFei implements Runnable { private ZiYuan ziyuan; public XiaoFei(ZiYuan ziYuan) { this.ziyuan = ziYuan; } @Override public void run() { while (true) { try { ziYuan.delete(); } catch (InterruptedException e) { e.printStackTrace(); } } }} ????
?????????????????????
public class TestMain { public static void main(String[] args) { ZiYuan yuan = new ZiYuan(); ShengChan sc = new ShengChan(yuan); XiaoFei xf = new XiaoFei(yuan); Thread scThread = new Thread(sc); scThread.setName("?????"); Thread xfThread = new Thread(xf); xfThread.setName("?????"); scThread.start(); xfThread.start(); }} ????
?????????????????
????
?????????????Java??Lock???Condition?????????????????/?????
Lock???Condition??
synchronized????await()?signal()?signalAll()????????????????????????????
import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;import java.util.concurrent.locks.Condition;public class ZiYuan { private Object object[] = new Object[1]; private int num = 1; private static final Lock lock = new ReentrantLock(); private static final Condition sCondition = lock.newCondition(); private static final Condition xfCondition = lock.newCondition(); public void add() { try { lock.lock(); try { while (object[0] != null) { sCondition.await(); } object[0] = "?" + num; System.out.println(Thread.currentThread().getName() + "????????" + object[0]); num++; xfCondition.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } catch (InterruptedException e) { e.printStackTrace(); } } public void delete() { try { lock.lock(); try { while (object[0] == null) { xfCondition.await(); } System.out.println(Thread.currentThread().getName() + "??????" + object[0]); object[0] = null; sCondition.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } catch (InterruptedException e) { e.printStackTrace(); } }} ?????????
public class ShengChan implements Runnable { private ZiYuan ziyuan; public ShengChan(ZiYuan ziYuan) { this.ziyuan = ziYuan; } @Override public void run() { while (true) { try { ziyuan.add(); } catch (InterruptedException e) { e.printStackTrace(); } } }} ?????????
public class XiaoFei implements Runnable { private ZiYuan ziyuan; public XiaoFei(ZiYuan ziYuan) { this.ziyuan = ziYuan; } @Override public void run() { while (true) { try { ziyuan.delete(); } catch (InterruptedException e) { e.printStackTrace(); } } }} ????
public class TestMain { public static void main(String[] args) { ZiYuan yuan = new ZiYuan(); ShengChan sc = new ShengChan(yuan); XiaoFei xf = new XiaoFei(yuan); Thread scThread = new Thread(sc); scThread.setName("?????"); Thread xfThread = new Thread(xf); xfThread.setName("?????"); scThread.start(); xfThread.start(); }} ????
Condition???await()?signal()????????????????????????????????????????????Lock??????????????????????????????????????Condition?????????????????????????????????????????????????Lock?Condition???????????????????????????????????????????????????????
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2026年05月24日 17时07分33秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
pickle
2023-03-02
Pickle thread.lock(Pymongo)
2023-03-02
pickle模块
2023-03-02
qYKVEtqdDg
2023-03-02
pid控制
2023-03-02
PID控制介绍-ChatGPT4o作答
2023-03-02
PID控制器数字化
2023-03-02
Qwen-VL项目使用指南
2023-03-02
PIESDKDoNet二次开发配置注意事项
2023-03-02
PIGS POJ 1149 网络流
2023-03-02
PIL Image对图像进行点乘,加上常数(等像素操作)
2023-03-02
PIL Image转Pytorch Tensor
2023-03-02
PIL&QOOT;IOERROR:带有大图像的图像文件被截断(&Q)
2023-03-02
PIL.Image、cv2的img、bytes相互转换
2023-03-02
PIL.Image进行图像融合显示(Image.blend)
2023-03-02
pilicat-dfs 霹雳猫-分布式文件系统
2023-03-02
Pillow lacks the JPEG 2000 plugin
2023-03-02
SpringBoot之ElasticsearchRestTemplate常用示例
2023-03-02
ping 全网段CMD命令
2023-03-02
ping 命令的七种用法,看完瞬间成大神
2023-03-02