public class ThreadTest {
volatile int flag=0;
public static void main(String[] args) throws InterruptedException {
ThreadTest threadTest = new ThreadTest();
threadTest.runThread();
}
public void runThread() throws InterruptedException{
Thread t1=new Thread(new Thread1());
Thread t2=new Thread(new Thread2());
t1.start();
t2.start();
}
public class Thread1 implements Runnable{
public void run() {
int i=1;
while(i<=100){
if(flag==0)
{
System.out.println("线程1 " + i);
i+=2;
flag=1;
}
}
}
}
public class Thread2 implements Runnable{
public void run() {
int i=2;
while(i<=100){
if(flag==1)
{
System.out.println("线程2 " + i);
i+=2;
flag=0;
}
}
}
}
}
public class ThreadTest {
int i =1;
boolean firstDone = false;
Object lock = new Object();
public static void main(String[] args) {
ThreadTest t =new ThreadTest();
t.print();
}
void print(){
Thread t1 = new Thread(new Runnable() {
public void run() {
for(;i<=100;)
{
synchronized (lock) {
if(!firstDone) {
System.out.println(Thread.currentThread().getName());
System.out.println(i++);
firstDone = true;
lock.notify();
}
else{
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
});
Thread t2 = new Thread(new Runnable() {
public void run() {
for(;i<=100;)
{
synchronized (lock) {
if(firstDone) {
System.out.println(Thread.currentThread().getName());
System.out.println(i++);
firstDone = false;
lock.notify();
}
else {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
});
t1.start();
t2.start();
}
}