Java多线程

进程:程序的一次动态执行过程,它经历了从代码加载,执行到执行完毕的一个完整过程,这个过程也是进程本身从产生,发展到最终消亡的过程。 多线程是实现并发机制的一直有效手段。进程和线程一样,都是实现并发的一个基本单位。

Java实现多线程方式

1.继承Thread 2.实现Runnable接口 Thread类:在java.lang包中定义的,一个类只要继承了Thread类,此类就称为多线程操作类。在Thread子类中,必须明确的覆写Thread类中的run()方法,此方法为线程的主体。 多线程定义语法: class 类名称 extends Thread{ 属性...; 方法...; public void run(){ 线程主体; } } 实现Runnable接口比继承Thread类有如下的明显优点 1.适合多个相同程序代码的线程去处理同一个资源 2.可以避免由于单继承局限带来的影响 3.增加了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的 综合类看,开发中使用Runnable接口是最合适的,以后使用多线程时都以Runnable接口的实现为操作的重点 线程的状态: 1.创建状态:准备好了一个多线程的对象:Thread t=new Thread() 2.就绪状态:调用start方法,等待cpu进行调度 3.运行状态:执行run()方法 阻塞状态:暂时停止执行,可能将资源交给其他线程使用。 终止状态(死亡状态):线程执行完毕,不再使用了。 Thread类中,通过getName()方法取得线程名称,通过setName()方法设置线程名称。 线程名称一般在启动前设置但也允许为已经运行的线程设置名称。允许两个Thread对象有相同的名字,但为了清晰,尽量避免此情况。 如果程序没有为线程指定名称,则系统会自动的为线程分配一个名称。 可以用currentThread()方法来取得当前正在运行的线程。 主方法实际上也是一个线程,主线程。 Java本身具备了垃圾回收机制,所以每当java程序执行的时候都会启动至少两个线程:主线程,GC(垃圾回收线程)。 可以通过isAlive方法来判断线程是否执行。 在线程操作中,可以使用join()方法让一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等待此线程完成之后才可以继续执行。 可以使用Thread.sleep()方法来使的线程暂时的休眠。 一个线程可以被另一个线程中断其操作的状态,使用interrupt()方法完成。 线程优先级:通过setPriority()函数设置,共三种:MIN_PRIORITY,NORM_PRIORITY,MAX_PRIORITY。 用yield()函数来实现线程礼让。

线程同步与死锁

同步:即多个操作在同一时间段内只能有一个线程进行,其他线程要等待此线程完成后才可以继续执行。 使用同步代码块,格式: synchronized(同步对象){ 需要同步的代码 } 使用同步操作后,程序的执行效率会明显降低很多。 或者可以使用同步方法,格式: synchronized 方法返回值 方法名称(参数列表){

} 资源共享时需要进行共享操作,但是程序中过多的同步会产生死锁。 死锁一般情况下就是表示在互相等待,是在程序运行时出现的一种问题。

线程的声明周期

一个新的线程创建之后可以通过start()方法进入到运行状态,在运行状态中可以使用yield()进行礼让,但是仍然可以进行,如果现在一个线程需要暂停的话,可以使用suspend(),sleep(),wait(),如果现在线程不需要执行,则可以通过stop()结束(如果run()方法执行完毕也表示结束),或者一个新的线程直接调用stop()方法也可以进行结束。 suspend():暂时挂起线程。 resume():恢复挂起的线程。 stop():停止线程。 因为以上的三个方法都会产生死锁的问题,所以现在不建议使用。 如果想要停止一个线程运行的话,可以通过设置标志位,让线程停止运行。

Comments