admin管理员组

文章数量:1612424

一、第一种方式是只调用sleep静态方法;第二种是获取对象后再调用sleep静态方法。第二种方式效率要低一些,因为多了一次函数调用,

而且通过对象调用静态方法也不太符合“静态”的定义(静态成员最好通过类名直接访问),但功能上是一致的。当需要调用非静态方法时使用第二种方式,

否则直接使用第一种方式。

二、如果线程是通过继承Thread实现的话这2个方法没有区别;
如果线程是通过实现Runnable接口来实现的,则不是Thread类,不能直接使用Thread.sleep()
必须使用Thread.currentThread()来得到当前线程的引用才可以调用sleep(),

所以要用Thread.currentThread().sleep()来睡眠。在多线程情况下区别特别明显。



以上是网上的资料,个人觉得,第一条可以。但是对第二条 任然不解,于是写了一下   public void s(){
    new Thread( new Runnable() {
        
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }).start();
    }

虽然没有报什么错误,但是其中所说的可能是当遇到多线程的时候会体现出两者的不同。


本文标签: threadSleepcurrentThread