日期:2014-05-20 浏览次数:20770 次
public class Counter {
public volatile static int count = 0;
public static void inc() {
//这里延迟1毫秒,使得结果明显
try {
Thread.sleep(1);
} catch (InterruptedException e) {
}
count++;
}
public static void main(String[] args) {
//同时启动1000个线程,去进行i++计算,看看实际结果
for (int i = 0; i < 1000; i++) {
new Thread(new Runnable() {
// @Override
public void run() {
Counter.inc();
}
}).start();
}
//这里每次运行的值都有可能不同,可能为1000
System.out.println("运行结果:Counter.count=" + Counter.count);
}
}
class ThreadSafe{
private static int toSecond = 5*1000; //超时毫秒数
private boolean flag = false;
private int source = 1;
public int printSource(){
return source;
}
public boolean incSource(){
if (!canAccess()){
return false;
}
flag = true;
source++;
flag = false;
return true;
}
public boolean decSource(){
if (!canAccess()){
return false;
}
flag = true;
source--;
flag = false;
return true;
}
/**
* 判断能不能访问,不能访问说明在修改,要等待一下
*/
private boolean canAccess(){
int time=0;
while (flag){
try{
Thread.sleep(2);
}catch(Exception ex){
//不考虑那么多,不做处理
}
time+=100;
//这里也不考虑那么多,认为循环一次就100毫秒
if (time>toSecond){
return false;
}
}
return true;
}
}