package thread.multithread.tradition; import java.util.Random; public class MultiThreadInAndDe { static ShareData sd=new ShareData(); public static void main(String[] args) { Store store=new Store(); for(int i=0;i<10;i++){ new Thread(store).start(); } } } class Store implements Runnable{ int count=100; public Store(int k){ count=k; } public Store(){ } @Override public void run() { decrement(); } private synchronized void decrement(){ count--; System.out.println(Thread.currentThread().getName()+" count"+count); } }
首先把要操作的对象封装成一个对象,然后对外提供不同的处理逻辑
把不同的逻辑写到不同的实现了runnable的的类的run方法中,再把之前的操作对象作为参数传递进不同的实现了runnable的的类中(构造方法,set方法俱可)
<pre name="code" class="java">public class MultiThreadInAndDe { public static void main(String[] args) { ShareData sd = new ShareData(); ADD add = new ADD(sd); for (int i = 0; i < 10; i++) { new Thread(add).start(); } SUB sub = new SUB(sd); for (int i = 0; i < 10; i++) { new Thread(sub).start(); } } } class ShareData { static int i = 100; public synchronized void increment() { i++; System.out.println(i); } public synchronized void decrement() { i--; System.out.println(i); } } class ADD implements Runnable { ShareData count; public ADD(ShareData k) { count = k; } @Override public void run() { count.decrement(); } } class SUB implements Runnable { ShareData count; public SUB(ShareData k) { count = k; } @Override public void run() { count.decrement(); } }
final ShareData sd=new ShareData(); for(int i=0;i<10;i++) new Thread(new Runnable() { @Override public void run() { sd.decrement(); } }).start(); for(int i=0;i<10;i++) new Thread(new Runnable() { @Override public void run() { sd.increment(); } }).start();当然,ShareData sd=new ShareData();也可以改成外部类的成员变量