线程学习代码备份:
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";
}
bFull = true;
q.notify();
}*/
if(i == 0)
q.put("zhangsan","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)
{
/*synchronized(q)
{
if(!q.bFull)
q.wait();
System.out.println(q.name);
System.out.println(":" + q.sex);
bFull = false;
q.notify();
}*/
q.get();
}
}
}
class Q
//将变量和实现同步控制块的方法封装在一起,有利于简化程序结构,更符合面向对象的思想;
{
String name = "unknown";
String sex = "unknown";
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 ThreadCommunation
{
public static void main(String [] args)
{
/*Q q = new Q();
new Thread(new Producer(q)).start();
new Thread(new Consumer(q)).start();*/
/*Thread t = new Thread(new Threadtest());*/
ThreadTest tt = new ThreadTest();
new Thread(tt).start(); //将tt作为线程的参数;
for(int i=0;i<100;i++)
{
if(i == 50)
tt.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");
}
}
}