您的位置:首页 > 职场人生

黑马程序员Java培训、Android培训-Java 学习过程记录_多线程3

2011-03-29 07:42 906 查看
线程学习代码备份:
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"); } }}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐