A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package MyThread;

  2. public class ThreadOne {
  3.         public static void main(String[] args) {
  4.                 Res r = new Res();
  5.                 Producer p = new Producer(r);
  6.                 Consumer c = new Consumer(r);
  7.                 Thread t1 = new Thread(p);
  8.                 Thread t2 = new Thread(p);
  9.                
  10.                 Thread t3 = new Thread(c);
  11.                 Thread t4 = new Thread(c);
  12.                 Thread t5 = new Thread(c);
  13.                
  14.                 t1.start();
  15.                 t2.start();
  16.                
  17.                 t3.start();
  18.                 t4.start();
  19.                 t5.start();
  20.         }

  21. }
  22. class Res{
  23.         private String name;
  24.         private int id;
  25.         private boolean flag = false;
  26.        
  27.         public synchronized void  Pro(String name){
  28.                
  29.                 while(flag)
  30.                 {
  31.                         try {
  32.                                 this.wait();
  33.                         } catch (InterruptedException e) {
  34.                                 // TODO Auto-generated catch block
  35.                                 e.printStackTrace();
  36.                         }
  37.                        
  38.                 }
  39.                 this.name = name+":"+id++;
  40.        
  41.                 System.out.println(Thread.currentThread().getName()+"-------我是生产者-------"+this.name);
  42.                 flag = true;
  43.                 this.notifyAll();       
  44.         }
  45.         public synchronized void Con(){
  46.                 while(!flag)
  47.                 {
  48.                         try {
  49.                                 this.wait();
  50.                         } catch (InterruptedException e) {
  51.                                 // TODO Auto-generated catch block
  52.                                 e.printStackTrace();
  53.                         }
  54.                 }
  55.                 System.out.println(Thread.currentThread().getName()+"..我是消费者..."+name);
  56.                 flag = false;
  57.                 this.notifyAll();
  58.         }
  59.        
  60. }
  61. class Producer implements Runnable
  62. {
  63.        
  64.         Res r;
  65.         Producer(Res r){
  66.                 this.r = r;
  67.         }
  68.         @Override
  69.         public void run() {
  70.        
  71.                 while(true){
  72.                         r.Pro("+商品");
  73.                 }
  74.         }       
  75. }
  76. class Consumer implements Runnable{
  77.         Res r;
  78.         Consumer(Res r){
  79.                 this.r = r;
  80.         }
  81.        
  82.         @Override
  83.         public void run() {
  84.                 while(true){
  85.                         r.Con();
  86.                 }
  87.                
  88.         }
  89.        
  90. }
复制代码


这是代码,在eclipse上运行就会死机,用cmd编译并运行就没事,这是为什么呢?

12 个回复

倒序浏览
卡死了吧
回复 使用道具 举报

不懂,运行其他程序都没事,一运行多线程就卡死
回复 使用道具 举报
这个我也不是很清楚啊
回复 使用道具 举报
试着执行其它程序,如果也死机,可能eclipse还有其它程序在执行,你还没有关闭完全。
回复 使用道具 举报
看了下,代码没问题,可能是你电脑的cpu不行吧,eclipse很耗费资源的,可以去百度下eclipse优化,把那些自动拼写之类的都去掉。

评分

参与人数 1黑马币 +1 收起 理由
Piaoyu + 1 赞一个!

查看全部评分

回复 使用道具 举报
主要是电脑Cpu问题,我i5的也是一运行多线程就卡死,cpu使用率98%
回复 使用道具 举报
廖彬 来自手机 中级黑马 2015-1-14 07:03:52
8#
内存满了  跑不动了
回复 使用道具 举报
小川行 来自手机 中级黑马 2015-1-14 08:39:23
9#
哈哈!学习学习!
回复 使用道具 举报
电脑不行了吧!
回复 使用道具 举报
你这里有死循环啊!!整的太过分电脑表示受不了了!!
回复 使用道具 举报
eclipse有时是会这样的。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马