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模拟线程干扰
猜你喜欢
转载自568025297.iteye.com/blog/2272005
今日推荐
周排行