如果多个线程的代码是一样的
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();也可以改成外部类的成员变量