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--;
}
}