Java线程问题:当一个目标对象被多个线程共享时候
来源:互联网 发布:vip域名值钱吗 编辑:程序博客网 时间:2024/06/15 15:25
如果多个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据。
如果多个线程执行的代码不同,这时候需要用不同的Runnable对象。将共享对象封装在另一个对象中,然后将这个对象逐一传给各个Runnable对象。每个线程对共享数据的操作方法也分配到那个对象身上去完成,这样容易实现针对该对象进行各个操作的互斥和通信。
总之,要同步互斥的几段代码最好分别放在几个独立的方法中,这些方法再放在同一个类型,将这个类的实例交给Runnable处理,这样容易实现他们之间的同步互斥和通信。
public class Demo2 { /** * @param args */ public static void main(String[] args) { MyAddRun addRun=new MyAddRun(); MySubRun subRun=new MySubRun(); new Thread(addRun,"add--1111----- ").start(); new Thread(addRun,"add--2222----- ").start(); new Thread(subRun,"sub--3333----- ").start(); new Thread(subRun,"sub--4444----- ").start(); }}
class Calculate { private static int i; public static synchronized void addOne() { i++; System.out.println(Thread.currentThread().getName()+ i); } public static synchronized void subOne() { i--; System.out.println(Thread.currentThread().getName()+ i); } }
class MyAddRun implements Runnable { @Override public void run() { for(int j=0;j<100;j++) { Calculate.addOne(); } } }
class MySubRun implements Runnable { @Override public void run() { for(int j=0;j<100;j++) { Calculate.subOne(); } } }
结果为:
……
…….
add–1111—– 96
add–1111—– 97
add–1111—– 98
add–1111—– 99
add–1111—– 100
sub–4444—– 99
sub–4444—– 98
sub–4444—– 97
sub–4444—– 96
sub–4444—– 95
sub–4444—– 94
sub–4444—– 93
sub–4444—– 92
sub–4444—– 91
sub–4444—– 90
………….
转自:
http://blog.csdn.net/lp1137917045/article/details/45227463
阅读全文
0 0
- [转] Java线程问题:当一个目标对象被多个线程共享时候
- Java线程问题:当一个目标对象被多个线程共享时候
- java线程共享变量问题
- Java线程间通过共享对象通信
- java 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- Java Runnable线程变量共享问题
- JVM线程共享问题
- 线程安全性与对象共享
- 线程安全和对象共享
- 当一个线程进入一个对象的synchronized() 方法后,其他线程是否可以进入此对象的其他方法
- Java并发编程详解之 线程安全和对象共享
- java线程学习(2)—对象的共享
- 《Java并发编程实战》---线程安全性---对象的共享
- java线程对单个对象的共享的一些方式
- Java并发编程规则:构建线程安全的共享对象
- 当发现某个java线程占CPU或内存非常高的时候,你如何定位?
- 当一个线程进入对象的synchronized方法后,其它线程是否可进入此对象的其它方法?
- 黑马程序员_关于线程对象和目标对象的问题
- Redis和Memcached 对比详解
- View的放大镜效果
- 安卓视图层组成
- Css3由远到近属性练习
- typedef用法小结
- Java线程问题:当一个目标对象被多个线程共享时候
- svn报错:Error running context: 由于目标计算机积极拒绝,无法连接。
- fseek函数、ftell函数和rewind函数
- apache 反向代理和tsl支持tsl1.2以下版本
- Http中post和get的区别
- 接口调试工具
- CSS简易导航列表样式
- 浏览器重排和重绘
- 动态规划算法