1.多线程处理一个int型变量的叠加,在不加锁的情况下会出现数据不一致的情况
package com.testsyn;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
static int nmb = 0;
public static void add() {
nmb++;
}
public static void main(String args[]) {
myRunnable mr = new myRunnable();
ExecutorService exe = Executors.newFixedThreadPool(100);
long time1 = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
exe.execute(mr);
}
exe.shutdown();
while (!exe.isTerminated()) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("nmb:" + nmb + " costtime:" + (System.currentTimeMillis() - time1));
}
public static class myRunnable implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
add();
}
}
}
执行结果
nmb:984 costtime:212
2.在函数上加synchronized关键字
package com.testsyn;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test {
static int nmb = 0;
public synchronized static void add() {
nmb++;
}
public static void main(String args[]) {
myRunnable mr = new myRunnable();
ExecutorService exe = Executors.newFixedThreadPool(100);
long time1 = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
exe.execute(mr);
}
exe.shutdown();
while (!exe.isTerminated()) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("nmb:" + nmb + " costtime:" + (System.currentTimeMillis() - time1));
}
public static class myRunnable implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
add();
}
}
}
执行结果
nmb:1000 costtime:211