Java多线程详解六 Thread类中的方法(1)

Thread类中的start()和run()方法

start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样,当你调用run()方法的时候,只是会在原来的线程中调用,没有启动新的线程,start()方法才会启动新线程。

为什么wait,notify和notifyAll这些方法不在Thread类中

主要的原因是JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得,如果线程需要等待某些锁,那么调用对象中的wait()方法就有意义了,如果wait方法定义在Thread类中,线程正在等待的是哪个锁就不明显了。简单的说,由于wait、notify、notifyAll都是锁级别的操作,所以把他们定义在Object类中因为锁属于对象。

为什么wait和notify方法要在同步代码中使用?

1.只有调用线程拥有某个对象的独占锁时,才能够调用该对象的wait notify notifyAll方法。
2.如果你不这么做,会抛出IllegalMonitorStateException异常。
3.为了避免wait和notify直接产生竞争条件。

wait方法强制当前线程释放对象锁,这意味着调用某个对象的wait()方法之前,当前线程必须已经获得了锁,因此,线程必须在某个对象同步方法或同步代码块中才能使用该对象的wait()方法。

在调用对象的notify和notifyAll方法之前,调用线程必须已经得到了该对象的锁,因此线程必须在同步方法或同步代码块中才能使用该对象的notify()和notifyAll()方法。

调用wait()方法通常的原因是:调用线程希望某个特殊的状态(或变量)被设置之后再继续执行,调用notify()或notifyAll()方法的原因通常是,调用线程希望告诉其他正在等待中的线程“特殊状态已经被设置”这个状态作为线程之间通信的通道,它必须是一个可变的共享变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值