1.线程安全的计数器
package my.thread.test2;
public class T1 {
public static void main(String[] args) {
Runnable r1 = new MyT();
Thread t = new Thread(r1);
t.setName("thread ****");
t.start();
Runnable r2 = new MyT();
Thread t1 = new Thread(r2);
t1.setName("thread ____");
t1.start();
}
}
class Count {
/**
* volatile 使变量为内存可见性为true
* 在没有添加该关键字时,数据不准确.
* 对于普通变量,一个线程中更新的值,不能马上反应在其他变量中。
* 如果需要在其他线程中立即可见,需要使用volatile关键字作为标识。
*/
private static volatile int count = 0;
public void add() {
synchronized (this) {
count++;
}
}
public int getCount() {
synchronized (this) {
return count;
}
}
}
class MyT implements Runnable {
public void run() {
Count c = new Count();
for (int i = 0; i < 1000; i++) {
c.add();
int count = c.getCount();
System.out.println(Thread.currentThread().getName()+" : " +count);
}
}
}