黑马程序员-Java中的多线程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

①实现多线程有两种方式,一种是继承Thread类,另外一种是实现Runable接口。


②Thread类是java.lang包的子类,线程也就是通过这个来实现的:


public class <类名> extends Thread{.....}


例子:
class Test_Thread extends Threads{
//重写run()方法的线程体
 }
   因为JAVA不支持多重继承,所以JAVA提供了Runnable接口。
   Runnable由单个的run()方法组成,它在激活线程时执行:
   class Runn implements Runnable{
public void run(){
  }
}


③Thread.start ()与 Thread.run ()的区别:
Thread.start ()方法(native)启动线程,使之进入就绪状态,当 cpu 分配时间该线程时,由 JVM 调度执行 run ()方法。 


④Sleep ()、 suspend ()和 wait ()之间的区别:
Thread.sleep ()使当前线程在指定的时间处于“非运行”(Not Runnable)状态。
线程一直持有对象的监视器。比如一个线程当前在一个同步块或同步方法中,其它线程不能进入该块或方法中。
如果另一线程调用了 interrupt ()方法,它将唤醒那个“睡眠的”线程。
t.suspend ()是过时的方法,使用 suspend ()导致线程进入停滞状态,该线程会一直持有对象的监视器,suspend ()容易引起死锁问题。
object.wait ()使当前线程出于“不可运行”状态,和 sleep ()不同的是 wait 是 object 的方法而不是 thread。
调用 object.wait ()时,线程先要获取这个对象的对象锁,当前线程必须在锁对象保持同步,把当前线程添加到等待队列中,
随后另一线程可以同步同一个对象锁来调用 object.notify (),这样将唤醒原来等待中的线程,然后释放该锁。
基本上 wait ()/notify ()与 sleep ()/interrupt ()类似,只是前者需要获取对象锁。


⑤Thread和Runnable的区别:
如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。
实现Runnable接口比继承Thread类所具有的优势:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立


⑥synchronized关键字:
可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个段代码。
当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。
另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
然而,当一个线程访问object的一个加锁代码块时,另一个线程仍然可以访问该object中的非加锁代码块。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值