public class MultiThreadShareData {
/**
* @param args
*/
public static void main(String[] args) {
// ShareData1 shareData = new ShareData1();
// new Thread(shareData).start();
// new Thread(shareData).start();
final ShareData1 shareData = new ShareData1();
//方法1
/*new Thread(new Runnable(){
@Override
public void run() {
shareData.increment();
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
shareData.decrement();
}
}).start();*/
//方法2
new Thread(new MyShareData1(shareData)).start();
new Thread(new MyShareData2(shareData)).start();
}
static class ShareData1 implements Runnable{
private int count = 100;
@Override
public void run() {
while(true){
count--;
}
}
private int j = 0;
public synchronized void increment(){
j++;
}
public synchronized void decrement(){
j--;
}
}
static class MyShareData1 implements Runnable{
private ShareData1 data;
public MyShareData1(ShareData1 data){
this.data = data;
}
@Override
public void run() {
data.increment();
}
}
static class MyShareData2 implements Runnable{
private ShareData1 data;
public MyShareData2(ShareData1 data){
this.data = data;
}
@Override
public void run() {
data.decrement();
}
}
}