代码块与函数的同步
来源:互联网 发布:mac arp 命令 编辑:程序博客网 时间:2024/05/29 06:57
先看下面代码:
class ThreadDemo1 { public static void main(String[] args) { TestThread tt = new TestThread(); new Thread(tt).start(); try { Thread.sleep(1); } catch (Exception e) { } tt.str = new String("method"); new Thread(tt).start(); }}class TestThread implements Runnable { int tickets = 100; String str = new String(""); public void run() { if (str.equals("method")) { while (true) { sale(); } } else { while (true) { synchronized (str) { if (tickets > 0) { try { Thread.sleep(10); } catch (Exception e) { } System.out.println(Thread.currentThread().getName() + " is saling ticket " + tickets--); } } } } } public synchronized void sale() { if (tickets > 0) { try { Thread.sleep(10); } catch (Exception e) { } System.out.print("sale():"); System.out.println(Thread.currentThread().getName() + " is saling ticket " + tickets--); } }}
运行结果:
从运行结果可以看出tickets有售出0号,所以没有同步,因为线程同步块使用的是str对象的标志位,而线程同步函数使用的是this(本类)对象的标志位。所以将synchronized(str)修改为synchronized(this)即可。
1 0
- 代码块与函数的同步
- 验证同步代码块与同步函数的锁【多线程】
- 验证同步代码块与同步函数的锁【多线程】
- java多线程-同步函数与同步代码块的区别
- 好用的同步代码块和同步函数
- 同步代码块和同步函数的区别
- 同步方法与同步代码块的区别?
- 同步方法与同步代码块的区别
- 5.8 实现代码块与函数之间的同步(非run和sale)
- 同步代码块同步函数实例
- JAVA 同步代码块和同步函数
- java同步代码块和同步函数
- 线程、同步代码块、同步函数、死锁
- 同步代码块和同步函数
- JAVA——多线程编程之同步:同步代码块与同步函数(二)
- 同步代码块,同步函数,静态同步函数的锁对象
- 同步函数,静态同步函数,同步代码块
- 代码块与构造函数的认识
- 用迭代实现无限级分类
- MEAN 安装
- [查异常网]-20160331-谈谈J2EE项目中的异常处理
- 游戏中角色类
- Log4net自定义实现httpAppender
- 代码块与函数的同步
- sql server 得到连续日期查询
- jquery获得iframe内容的高度
- CodeForces 368A-Sereja and Coat Rack【队列】
- mysql存储emoji表情
- Windows Dev Intro - CreateFile Relevants
- swift简单学习之继承
- iOS纯代码开发和xib开发
- iOS多线程编程指南(四)线程同步(2)