题目:设计4个线程,其中两个线程 每次对j增加1,另外两个线程每次对j减少1,写出程序;
- 法一:共享数据和操作方法封装到一个内部类中
public class MultiThreadShareData {
public static void main(String[] args){
final ShareData shareData = new ShareData();
for(int i=0;i<2;i++){
new Thread(new Runnable() {
@Override
public void run() {
shareData.increment();
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
shareData.decrement();
}
}).start();
}
}
static class ShareData{
private int j=100;
public synchronized void increment(){
j++;
System.out.println("increment "+j);
}
public synchronized void decrement(){
j--;
System.out.println("decrement "+j);
}
}
}
(2)法二:
public class MultiThreadShareData2 {
public static void main(String[] args){
final ShareData shareData = new ShareData();
for(int i=0;i<2;i++){
new Thread(new MyRunnable1(shareData)).start();
new Thread(new MyRunnable2(shareData)).start();
}
}
static class ShareData{
private int j=100;
public synchronized void increment(){
j++;
System.out.println("increment "+j);
}
public synchronized void decrement(){
j--;
System.out.println("decrement "+j);
}
}
static class MyRunnable1 implements Runnable{
private ShareData shareData=null;
public MyRunnable1(ShareData shareData) {
this.shareData=shareData;
}
@Override
public void run() {
shareData.increment();
}
}
static class MyRunnable2 implements Runnable{
private ShareData shareData=null;
public MyRunnable2(ShareData shareData) {
this.shareData=shareData;
}
@Override
public void run() {
shareData.decrement();
}
}
}
如有疑问,请发邮件:[email protected]
github: https://github.com/wangrui0/