class Producer implements Runnable
{
Q q;
public Producer(Q q)
{
this.q = q;
}
public void run()
{
int i = 0;
while(true)
{
synchronized(q)
{
if(q.bFull)
try{
q.wait();
}catch(Exception e)
{
}
if(i == 0)
{
q.name = "zhangsan";
try{Thread.sleep(1);}catch(Exception e){}
q.sex = "male";
}
else
{
q.name = "lisi";
q.sex = "female";
}
q.bFull = true;
q.notify();
}
i = (i+1)%2;
}
}
}
class Consumer implements Runnable
{
Q q;
public Consumer(Q q)
{
this.q = q;
}
public void run()
{
while(true)
{
synchronized(q)
{
if(!q.bFull)
try{
q.wait();
}catch(Exception e)
{
}
System.out.print(q.name);
System.out.println(":" + q.sex);
q.bFull = false;
q.notify();
}
}
}
}
class ThreadCommunication
{
public static void main(String [] args)
{
Q q = new Q();
new Thread(new Producer(q)).start();
new Thread(new Consumer(q)).start();
}
}
class Q
{
String name = "unknown";
String sex = "unknown";
boolean bFull = false;
}
class Producer implements Runnable
{
Q q;
public Producer(Q q)
{
this.q = q;
}
public void run()
{
int i = 0;
while(true)
{
if(i == 0)
q.put("zhangshan", "male");
else
q.put("lisi", "female");
i = (i+1)%2;
}
}
}
class Consumer implements Runnable
{
Q q;
public Consumer(Q q)
{
this.q = q;
}
public void run()
{
while(true)
{
q.get();
}
}
}
class ThreadCommunication
{
public static void main(String [] args)
{
Q q = new Q();
new Thread(new Producer(q)).start();
new Thread(new Consumer(q)).start();
}
}
class Q
{
private String name = "unknown";
private String sex = "unknown";
private boolean bFull = false;
public synchronized void put(String name, String sex)
{
if(bFull)
try{wait();}catch(Exception e){}
this.name = name;
try{Thread.sleep(1);}catch(Exception e){}
this.sex = sex;
bFull = true;
notify();
}
public synchronized void get()
{
if(!bFull)
try{wait();}catch(Exception e){}
System.out.print(name);
System.out.println(":" + sex);
bFull = false;
notify();
}
}
class ThreadCommunication
{
public static void main(String [] args)
{
ThreadTest t = new ThreadTest();
new Thread(t).start();
for(int i=0; i<100; i++)
{
if(i == 50)
t.stopMe();
System.out.println("main() is running");
}
}
}
class ThreadTest implements Runnable
{
private boolean bStop = false;
public void stopMe()
{
bStop = true;
}
public void run()
{
while(!bStop)
{
System.out.println(Thread.currentThread().getName() + "is running");
}
}
}