java模拟线程干扰
2016-01-19 14:49
453 查看
package async; import java.util.ArrayList; import java.util.List; import java.util.Random; public class Main { static final int threadInitNumber = 2; public static void main(String[] args){ Counter counter = new Counter(); List<Thread> threads = new ArrayList<Thread>(); for(int i=0;i<threadInitNumber;i++){ threads.add(new Thread(new Async(counter),"thread" + i)); } for(Thread thread : threads){ thread.start(); } } } /* * 线程干扰:多个线程访问共享对象的非原子性操作时,会线程竞争,从而产生线程干扰 * * 模拟线程干扰 */ class Async implements Runnable{ private Counter counter = new Counter(); public Async() { } public Async(Counter counter) { super(); this.counter = counter; } @Override public void run() { Random random = new Random(); while(true){ if(random.nextInt(10)<5){ print("execute increment:" + counter.current()); counter.increment(); }else{ if(counter.current()>0){ print("execute decrement:" + counter.current()); counter.decrement(); } } print("counter current value:" + counter.current()); if(random.nextInt(100)==1){ print("exit thread......................"); return; } } } void print(String content){ System.out.println(Thread.currentThread().getName() + " ---> " + content); } } class Counter { private int count = 0; public int current(){ return count; } public int increment(){ return count++; } public int decrement(){ return count--; } }
相关文章推荐
- Java线程锁_模拟失效时修改值
- java线程基础巩固---采用多线程方式模拟银行排队叫号以及Runnable接口存在的必要性
- Java线程并发干扰问题及解决方式(锁对象)
- (9)java5的线程【锁lock】与【读写锁_以及模拟缓存(妙用)】技术
- java线程——模拟烧水,洗茶杯与泡茶过程
- Java线程并发干扰问题及解决方式(锁对象)
- java 使用线程模拟 队列实现
- java 线程模拟文件下载
- JAVA线程并发性之CAS算法,模拟实现代码
- Java线程并发干扰问题及解决方式(锁对象)
- Java模拟排查线程死锁问题
- Java线程并发干扰问题及解决方式(锁对象)
- JAVA学习笔记(1)_____模拟线程通信之生产者消费者问题
- java线程同步(生产者消费者应用-模拟叫号系统)
- Java线程并发干扰问题及解决方式(锁对象)
- java线程模拟生产者与消费者
- Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区
- Java【多线程知识总结(10)】线程通信之wait()与notify()的运用--模拟指挥官指挥2个连队交替轰炸战区<另外的写法>
- Java线程并发干扰问题及解决方式(锁对象)
- java CountDownLatch 模拟多并发线程简单例子