多线程

1   线程的实现

  实现Runnable接口相对于继承Thread类来说,有如下优势

  适合多个相同程序代码的线程区处理统一资源的情况

  可以避免由于Java单继承特性带来的局限

  增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的

例如:卖5张票,继承Thread类的三个线程会各卖5张,其资源<5张票>并没有共享,实现Runnable接口的话,三个线程会一共卖5张票,实现资源共享

2  线程的状态

  任何线程一般具有5种状态

  创建:用构造方法新建一个线程之后,该线程就处于创建状态 如 Thread thread = new Thread()此时,已具有相应的内存空间和其他资源,但处于不可运行状态。

  终止:线程调用stop()会run()执行结束后。即处于死亡状态,线程结束。

  运行:当就绪状态的线程被调用并获得处理器资源时,该线程就进入了运行状态,此时会自动调用run(),run()定义了该线程的操作和功能

  阻塞:一个运行状态的线程在某些特殊情况如被挂起,或需要执行耗时的输入/输出操作时,将让出CPU并暂时终止自己的执行,进入阻塞状态,阻塞时,线程不能进入队列,只有当阻塞原因消除,线程转入就绪状态排队

  就绪:调用start()启动线程即处于就绪状态,该线程进入线程队列排队,等待CPU服务,已具备运行条件

3  线程的强制运行

  使用join(),让一个线程强制运行,其他线程无法运行,必须等待此线程结束之后才能继续进行

4  同步和死锁:过多的同步会造成死锁 

5  

  

原文地址:https://www.cnblogs.com/blog4matto/p/5598788.html