package policequerytest.test;
import java.util.concurrent.TimeUnit;
/**
*
* @author User
*/
public class Test2 {
public static void main(String[] args) {
Data data = new Data();
MainThread mainThread = new MainThread(data);
mainThread.run();
}
private static class MainThread implements Runnable {
private Data data;
public MainThread(Data data) {
this.data = data;
}
@Override
public void run() {
int plus = data.plus();
Thread childThread = new Thread(new ChildThread(Thread.currentThread(), data));
childThread.setDaemon(false);
childThread.start();
System.out.println(Thread.currentThread().getName() + "---" + plus);
try {
TimeUnit.MILLISECONDS.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private static class ChildThread implements Runnable {
private Thread mainThread;
private Data data;
public ChildThread(Thread mainThread, Data data) {
this.mainThread = mainThread;
this.data = data;
}
@Override
public void run() {
while (mainThread.isAlive()) {
int reduce = data.reduce();
System.out.println(Thread.currentThread().getName() + "---" + reduce);
try {
TimeUnit.MILLISECONDS.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
/**
* 共享数据内部类方式:注意加锁
*/
private static class Data {
private int i = 50;
public String getTicket() {
return ticket;
}
public void setTicket(String ticket) {
this.ticket = ticket;
}
private String ticket;
public synchronized int plus() {
return i++;
}
public synchronized int reduce() {
return i--;
}
}
}