1.三个线程要共享计数变量,才能达到你的要求吧
如果不是共享同一个计数变量,当然3个线程各自执行各自的计数class ThreadTest implements Runnable {
Object obj = new Object();
int i = 0;
public void run() {
while(true){
synchronized (obj) {
if(i >= 100)
return;
try {
Thread.sleep(10);
System.out.println(Thread.currentThread().getName() + i);
} catch (InterruptedException e) {
e.printStackTrace();
}
i += 2;
}
}
}
}
如果不是共享同一个计数变量,当然3个线程各自执行各自的计数class ThreadTest implements Runnable {
Object obj = new Object();
int i = 0;
public void run() {
while(true){
synchronized (obj) {
if(i >= 100)
return;
try {
Thread.sleep(10);
System.out.println(Thread.currentThread().getName() + i);
} catch (InterruptedException e) {
e.printStackTrace();
}
i += 2;
}
}
}
}
a.lock();
要同步的代码;
a.unlock();
ps:以上的方法在c#中也有用到
class ThreadTest implements Runnable {
Object obj = new Object();
int count = 2 ;
public void run() {
for (int i = 2; i < 100; i += 2) {
synchronized (obj) {
try {
Thread.sleep(10);
System.out.println(Thread.currentThread().getName() + count);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count += 2 ;
}
}
}public class RunTest {
public static void main(String[] args) { ThreadTest tt = new ThreadTest();
Thread t1 = new Thread(tt, "线程A:");
Thread t2 = new Thread(tt, "线程B:");
//Thread t3 = new Thread(tt, "线程C:");
t1.start();
t2.start();
//t3.start();
}
}