下面的代码是有2个线程,一个线程对共享变量加1,另一个线程对共享变量减1的实现
package com.lyj;
/**
* 多个线程操作同一个对象。
* 执行代码不同,将要执行的代码封装在一个共享变量中,然后传递给各自的Runnable, 在run方法操作不同的执行的代码
*/
public class MultiThreadShareDataDemo {
/*
* 有2个线程,一个线程对共享变量加1,另一个线程对共享变量减1
*/
public static void main(String[] args) {
ShareData sd = new ShareData();
new Thread(new MyRunnable1(sd)).start();
new Thread(new MyRunnable2(sd)).start();
}
}
class MyRunnable1 implements Runnable {
private ShareData sd;
public MyRunnable1(ShareData sd) {
this.sd = sd;
}
@Override
public void run() {
sd.increate();
}
}
class MyRunnable2 implements Runnable {
private ShareData sd;
public MyRunnable2(ShareData sd) {
this.sd = sd;
}
@Override
public void run() {
sd.decreate();
}
}
// 共享对象
class ShareData {
private int count = 100;
public synchronized void increate() {
count++;
}
public synchronized void decreate() {
count--;
}
}