黑马程序员技术交流社区

标题: 为什么我运行多线程代码的时候,电脑会死机呢 [打印本页]

作者: Piaoyu    时间: 2015-1-13 10:05
标题: 为什么我运行多线程代码的时候,电脑会死机呢
  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编译并运行就没事,这是为什么呢?
作者: 446111220    时间: 2015-1-13 10:34
卡死了吧
作者: Piaoyu    时间: 2015-1-13 10:37
446111220 发表于 2015-1-13 10:34
卡死了吧

不懂,运行其他程序都没事,一运行多线程就卡死
作者: 446111220    时间: 2015-1-13 11:41
这个我也不是很清楚啊

作者: kerner    时间: 2015-1-13 13:03
试着执行其它程序,如果也死机,可能eclipse还有其它程序在执行,你还没有关闭完全。
作者: 云兮丶    时间: 2015-1-13 13:04
看了下,代码没问题,可能是你电脑的cpu不行吧,eclipse很耗费资源的,可以去百度下eclipse优化,把那些自动拼写之类的都去掉。
作者: 任我行_2014    时间: 2015-1-14 00:36
主要是电脑Cpu问题,我i5的也是一运行多线程就卡死,cpu使用率98%
作者: 廖彬    时间: 2015-1-14 07:03
内存满了  跑不动了
作者: 小川行    时间: 2015-1-14 08:39
哈哈!学习学习!
作者: 以利亚    时间: 2015-1-14 09:00
电脑不行了吧!
作者: chudaming213    时间: 2015-1-14 09:10
你这里有死循环啊!!整的太过分电脑表示受不了了!!
作者: outsider1020    时间: 2015-1-16 09:57
eclipse有时是会这样的。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2