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

一系列1: 细说Java多线程之内存可见性

2017-08-06 16:31 148 查看












































代码练习

package com.thread.Thread_01;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

class Counter {

private static volatile int num = 0;
private Lock lock = new ReentrantLock();

/*
* 一种方式
* public static int getCou() { \
*      synchronized(Counter.class) { num++;
*          return num;
*      }
* }
*/

public int getCou() {
//不能再static中使用
lock.lock();
try {
num++;
return num;
} finally {
lock.unlock();
}

}
}

class MyApp extends Thread {

public void run() {
for (int i = 0; i < 500; i++) {
Counter counter = new Counter();
int cou = counter.getCou();
System.out.println(currentThread().getName() + " : " + cou);
}
}
}


package com.thread.Thread_01;

public class App {
public static void main(String[] args) {
Thread t1 = new MyApp();
t1.setName("*********");
t1.start();
Thread t2 = new MyApp();
t2.setName("&&&&&&&&&");
t2.start();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: