黑马程序员技术交流社区

标题: 关于多线程问题 [打印本页]

作者: 李爱霞    时间: 2011-12-29 21:31
标题: 关于多线程问题
本帖最后由 李爱霞 于 2011-12-30 08:24 编辑

sleep() 和 wait() 他们之间到底有什么区别,怎么合理的使用这个两个方法呀????
作者: 赵玮    时间: 2011-12-29 21:43
sleep()是线程类的方法。使线程停止一段时间的方法
wait()是Object方法。使线程暂停执行。
作者: 刘健    时间: 2011-12-29 21:43
sleep()是线程暂时休眠,主要用在线程需要自动间隔一段时间运行
wait()是线程等待,线程暂不执行,直到唤醒才会继续执行
作者: 陈浩    时间: 2011-12-29 21:45
    Java中的多线程是一种抢占式的机制而不是分时机制。线程主要有以下几种状态:可运行,运行,阻塞,死亡。抢占式机制指的是有多个线程处于可运行状态,但是只有一个线程在运行。 当有多个线程访问共享数据的时候,就需要对线程进行同步。线程中的几个主要方法的比较:
Thread类的方法:sleep(),yield()等
Object的方法:wait()和notify()等
   每个对象都有一个机锁来控制同步访问。Synchronized关键字可以和对象的机锁交互,来实现线程的同步。由于sleep()方法是Thread类的方法,因此它不能改变对象的机锁。所以当在一个Synchronized方法中调用sleep()时,线程虽然休眠了,但是对象的机锁没有被释放,其他线程仍然无法访问这个对象。而wait()方法则会在线程休眠的同时释放掉机锁,其他线程可以访问该对象。
作者: 刘小峰    时间: 2011-12-29 22:05
wait()在其他线程调用此对象的notify()方法或notifyAll()方法前,导致当前线程等待
wait(long timeout)
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。
wait(long timeout, int nanos)
          在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
sleep(long millis)
          在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
sleep(long millis, int nanos)
          在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。

作者: 李爱霞    时间: 2011-12-30 08:24
love风之吻浩 发表于 2011-12-29 21:45
Java中的多线程是一种抢占式的机制而不是分时机制。线程主要有以下几种状态:可运行,运行,阻塞,死亡 ...

谢谢!学习啦!希望大家多多关照




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