1.触发不同步错误,已知int i = 0,启动三个线程对i进行+1操作,每个线程对i都加100000次,要求我的最终结果小于300000
public class Task1 {
static int i = 0;
private static class MyThread extends Thread {
@Override
public void run(){
for(int j = 0; j <100000; j ++){
i ++;
}
};
}
public static void main(String [] args){
MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread();
MyThread mt3 = new MyThread();
mt1.start();
mt2.start();
mt3.start();
试试{
mt1.join();
mt2.join();
mt3.join();
的System.out.println(ⅰ);
} catch(Exception e){
e.printStackTrace();
}
}
}
2.线程同步,使用同步块对任务一进行改造,使得最终结果精确等于300000。
public class Task2 {
static int i = 0;
static Object lock = new Object();
private static class MyThread extends Thread {
@Override
public void run() {
for (int j = 0; j < 100000; j++) {
synchronized (lock) {
i++;
}
}
};
}
public static void main(String[] args) {
MyThread mt1 = new MyThread();
MyThread mt2 = new MyThread();
MyThread mt3 = new MyThread();
mt1.start();
mt2.start();
mt3.start();
try {
mt1.join();
mt2.join();
mt3.join();
System.out.println(i);
} catch (Exception e) {
e.printStackTrace();
}
}
}