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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高梦晓 中级黑马   /  2013-4-16 16:36  /  1040 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下;
  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秒。
我想问的是,有没有方法可以使得两个线程同时休眠。而不是第一个线程休眠,休眠完之后,在休眠第二个。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 沈浩 于 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);就可以
例如      

  • public void run() {
  • // TODO Auto-generated method stub
  • Thread.sleep(5000);
  • System.out.println("Run");
  • }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
楼主是想让后面那两个方法也实现多线程吧 !我改了一下你的代码,你在试一试。
我测试是同时出来的
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();
    }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马