/**
* Created by chengtao on 17/12/3.
* 多个线程 如何共享数据?
* 常见实例:多个窗口同时售卖火车票
*/
public class Thread0701_MultiThreadShareData {
public static void main(String[] args) {
SaleTicket data1 = new SaleTicket();
new Thread(data1).start();
new Thread(data1).start();
} static class SaleTicket implements Runnable{
private int count = 100;
public void run() {
while (true){
synchronized (this){
if(count>0){
count--;
System.out.println( Thread.currentThread().getName() + " 剩余票数 " + count);
}
}
}
}
}
} /*
以上代码 适用于 执行方法相同的场景,因为执行的代码相同,
所以多个线程可以 传入同一个runnable接口的实现类,在实现类中定义和处理数据
进而实现数据的共享 如果 线程执行的代码不同:如有的线程对变量加一 有的线程对变量减一
*/ -----------------------------
-----------------------------
-----------------------------
/**
* Created by chengtao on 17/12/3.
*/
public class Thread0702_MultiThreadShareData { private static ShareData1 data1 = new ShareData1(); public static void main(String[] args) {
ShareData1 data2 = new ShareData1();
new Thread(new MyRunnable1(data2)).start();
new Thread(new MyRunnable2(data2)).start(); final ShareData1 data1 = new ShareData1();
new Thread(new Runnable(){
public void run() {
data1.decrement(); }
}).start();
new Thread(new Runnable(){
public void run() {
data1.increment(); }
}).start(); } } class MyRunnable1 implements Runnable{
private ShareData1 data1;
public MyRunnable1(ShareData1 data1){
this.data1 = data1;
}
public void run() {
data1.decrement(); }
} class MyRunnable2 implements Runnable{
private ShareData1 data1;
public MyRunnable2(ShareData1 data1){
this.data1 = data1;
}
public void run() {
data1.increment();
}
} class ShareData1 {
private int j = 0;
public synchronized void increment(){
j++;
} public synchronized void decrement(){
j--;
}
}

最新文章

  1. 让hammer完美支持Pixi.js - 2D webG库
  2. 利用python检测色情图片简易实例
  3. Fisher vector for image classification
  4. 简介Gulp, Grunt, Bower, 和 Npm 对Visual Studio的支持
  5. docker中安装ssh服务
  6. Color Me Less
  7. 获取git的最后一次提交的commit id
  8. Redhat6.x下如何制作虚拟机快照和镜像封装
  9. 数据结构 《2》----基于邻接表表示的图的实现 DFS(递归和非递归), BFS
  10. C++求最小公倍数
  11. codeforces Minesweeper 1D
  12. UIBarButtonItem-添加自定义Left或者Right按钮 <总结>
  13. “Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED”
  14. docker构建镜像
  15. 【XSY1301】原题的价值 第二类斯特林数 NTT
  16. 如何转换cdr文件
  17. Servlet运行原理以及生命周期
  18. 【nodejs】FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
  19. Mysql 根据时间统计总数
  20. inner join和outer join

热门文章

  1. 你所不知道的JSON
  2. backbone.js初探(转)
  3. 【BZOJ】1045: [HAOI2008]糖果传递(中位数)
  4. duilib Webkit内核dui化浏览器控件
  5. strust2自定义interceptor的基本方法及操作
  6. C# 压缩和解压文件(SharpZipLib)
  7. 有用的Python代码片段
  8. WPF 的拖拽操作(DragDrop)
  9. iOS: NSObject中执行Selector的相关方法
  10. 《转》武​汉​的​I​T​公​司