第一章 java多线程技能
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
第二章 对象及变量的并发访问
第三章 线程间通信
package com.zlc.jzlc;
public class ValueObject {
public static String value = "";
}
package com.zlc.jzlc;
public class P {
private String lock;
public P(String lock) {
this.lock = lock;
}
public void setValue() {
try {
synchronized (lock) {
if (!ValueObject.value.equals("")) {
lock.wait();
}
String value = System.currentTimeMillis() + "_" + System.nanoTime();
System.out.println("P set:" + value);
ValueObject.value = value;
lock.notify();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.zlc.jzlc;
public class C {
private String lock;
public C(String lock) {
this.lock = lock;
}
public void getValue() {
try {
synchronized (lock) {
if (ValueObject.value.equals("")) {
lock.wait();
}
System.out.println("C get:" + ValueObject.value);
ValueObject.value = "";
lock.notify();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.zlc.jzlc;
public class ThreadP extends Thread {
private P p;
public ThreadP(P p) {
this.p = p;
}
public void run() {
while (true) {
p.setValue();
}
}
}
package com.zlc.jzlc;
public class ThreadC extends Thread {
private C c;
public ThreadC(C c) {
this.c = c;
}
public void run() {
while (true) {
c.getValue();
}
}
}
package com.zlc.jzlc;
public class PCTest {
public static void main(String[] args) {
String lock = new String("");
P p = new P(lock);
C c = new C(lock);
ThreadP tp = new ThreadP(p);
ThreadC tc = new ThreadC(c);
tp.start();
tc.start();
}
}
第四章 Lock的使用
其他
package com.zlc.jzlc;
public class MyObject {
private volatile static MyObject myObject;
private MyObject() {
}
public static MyObject getInstance() {
try {
if (myObject == null) {
//do some things
synchronized (MyObject.class) {
if (myObject == null) {
myObject = new MyObject();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return myObject;
}
}