一,JAVA中实现多线程(一)
1,在Java中负责线程的这个功能的是Java.lang.Thread 这个类
2,可以通过创建 Thread 的实例来创建新的线程。
3,每个线程都是通过某个特定Thread对象所对应的方法run( )来完成其操作的,方法run( )称为线程体。
4,通过调用Thead类的start()方法来启动一个线程。
二,创建线程的方式一继承Thread类
操作步骤: 【1】继承Thread类
【2】重写run方法
【3】创建对象,调用start()方法启动线程
三,线程的执行
四,创建线程的方式二实现Runnable接口
操作步骤:【1】实现Runnable接口
【2】重写run方法
【3】创建对象,调用start()方法启动线程
五,JAVA中实现多线程(二)
1,继承Thread类方式的缺点:那就是如果我们的类已经从一个类继承(如小程序必须继承自 Applet 类),则无法再继承 Thread类
2,通过Runnable接口实现多线程
3,优点:可以同时实现继承。实现Runnable接口方式要通用一些。
4,(1)避免单继承
5,(2)方便共享资源 同一份资源 多个代理访问
六,线程状态
1,新生状态
– 用new关键字建立一个线程后,该线程对象就处于新生状态。
– 处于新生状态的线程有自己的内存空间,通过调用start()方法进入就绪状态。
2,就绪状态
– 处于就绪状态线程具备了运行条件,但还没分配到CPU,处于线程就绪队列,等待系统为其分
配CPU。
– 当系统选定一个等待执行的线程后,它就会从就绪状态进入执行状态,该动作称为 CPU “ 调 度”。
3,运行状态
– 在运行状态的线程执行自己的run方法中代码,直到等待某资源而阻塞戒完成任何而死亡。
– 如果在给定的时间片内没有执行结束,就会被系统给换下来回到等待执行状态。
4,阻塞状态
– 处于运行状态的线程在某些情况下,如执行了sleep(睡眠)方法,戒等待I/O设备等资源,将让
出CPU并暂时停止自己运行,进入阻塞状态。
– 在阻塞状态的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,戒等
待的I/O设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待,被系统选中后从
原来停止的位置开始继续执行。
5,死亡状态
– 死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有三个,
一个是正常运行的线程完成了它的全部工作;
另一个是线程被强制性地终止,如通过stop方法来终止一个线程【不推荐使用】;
三是线程抛出未捕获的异常。
七,线程操作的相关方法
八,阻塞状态(sleep/yield/join方法)
1,有三种方法可以暂停Thread执行:
(1),sleep:
不会释放锁,Sleep时别的线程也不可以访问锁定对象。
(2),yield:
让出CPU的使用权,从运行态直接迚入就绪态。让CPU重新挑选哪一个线程进入运行状态。
(3),join:
当某个线程等待另一个线程执行结束后,才继续执行时,使调用该方法的线程在此之前执行完毕,也就是等待调用该方法的线程执行完毕后再往下继续执行