黑马程序员技术交流社区

标题: Java如何sleep当前的全部线程? [打印本页]

作者: 高梦晓    时间: 2013-4-16 16:36
标题: Java如何sleep当前的全部线程?
代码如下;
  1. public class MyClass implements Runnable{
  2.     public static void main(String[] args) {
  3.         MyClass m1 = new MyClass();
  4.         Thread t1 = new Thread(m1);
  5.         t1.start();
  6.         MyClass m2 = new MyClass();
  7.         Thread t2 = new Thread(m2);
  8.         t2.start();
  9.         m1.mySleep();
  10.         m2.mySleep();
  11.     }

  12.     public void mySleep() {
  13.         try {
  14.             Thread.sleep(5000);
  15.             System.out.println("Sleep / Run");
  16.         } catch (InterruptedException e) {
  17.             // TODO Auto-generated catch block
  18.             e.printStackTrace();
  19.         }
  20.     }
  21.      
  22.     @Override
  23.     public void run() {
  24.         // TODO Auto-generated method stub        
  25.         System.out.println("Run");
  26.     }
  27. }
复制代码
输出:
Run
Run
Sleep / Run
Sleep / Run


第一个Sleep / Run等待了5秒,第二个Sleep / Run在第一个出现后,又等了5秒。
我想问的是,有没有方法可以使得两个线程同时休眠。而不是第一个线程休眠,休眠完之后,在休眠第二个。

作者: 沈浩    时间: 2013-4-16 17:11
本帖最后由 沈浩 于 2013-4-16 17:17 编辑

第一个Sleep / Run等待了5秒,第二个Sleep / Run在第一个出现后,又等了5秒。
我想问的是,有没有方法可以使得两个线程同时休眠。而不是第一个线程休眠,休眠完之后,在休眠第二个。
回答:
因为  打印出两次Sleep / Run都是一个线程执行的   就是主线程   所以是第一个Sleep / Run等待了5秒,第二个Sleep / Run在第一个出现后,又等了5秒。

创建的两个线程t1,t2执行的都是run  
而你说的使得两个线程同时休眠(不能同时执行去休眠但是状态可以是同时都在休眠)t1,t2在run方法不同步的情况下在run中加一句Thread.sleep(5000);就可以
例如      

作者: 偏執旳、靑春    时间: 2013-4-16 21:31
楼主是想让后面那两个方法也实现多线程吧 !我改了一下你的代码,你在试一试。
我测试是同时出来的
package test;

public class MyClass implements Runnable{
    public static void main(String[] args) {
        MyClass m1 = new MyClass();
        Thread t1 = new Thread(m1);
        t1.start();
        MyClass m2 = new MyClass();
        Thread t2 = new Thread(m2);
        t2.start();
       // m1.mySleep();
        //m2.mySleep();
    }

    public void mySleep() {
        try {
            Thread.sleep(5000);
            System.out.println("Sleep / Run");
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
     
    @Override
    public void run() {
        // TODO Auto-generated method stub        
        System.out.println("Run");
        mySleep();
    }
}

作者: 黄玉昆    时间: 2013-4-17 09:01
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢




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