您的位置:首页 > 编程语言 > Java开发

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

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: