在Java中多线程是很重要的一个部分,线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。而进程就是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。
一、进程和线程的关系进程是一个应用程序,线程是进程中一个小的执行单元,一个进程中至少有一个线程,一个进程中有多个线程的时候,就称之为多线程程序。而main方法是一个主线程,
二、创建线程方式一:继承Thread类 ,重写run方法,在这个run方法里面定义线程任务,创建线程对象,启动线程(start方法)方式二:实现Runnable接口,重写run方法,在这个run方法里面定义线程任务,创建线程对象,启动线程继承Thread类和实现Runnable接口的2种方式的特点:继承是单继承,接口可以多实现,一个类在继承一个父类同时,还可以实现接口。实现Runnable接口这种创建线程的方式解决了继承Thread类的单继承的局限性,实现接口方式更为常用匿名线程创建方式
三、线程池线程池,其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。
四、线程5大状态,1.新建状态,2.就绪状态,3.阻塞状,4.运行状态,5.死亡状态
五、线程安全如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。其实,线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。
六 线程同步(线程安全处理Synchronized) 同步方法, 死锁,同步锁使用的弊端:当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步。这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁。这种情况能避免掉。 Lock锁,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作。主要方法 lock()和 unlock()同步代码块: 在代码块声明上 加上synchronized。
七、线程等待唤醒机制在了解线程的等待唤醒机制之前,有必要搞清一个概念——线程之间的通信:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。通过一定的手段使各个线程能有效的利用资源。而这种手段即—— 等待唤醒机制。等待唤醒机制所涉及到的方法:wait() :等待,将正在执行的线程释放其执行资格 和 执行权,并存储到线程池中。notify():唤醒,唤醒线程池中被wait()的线程,一次唤醒一个,而且是任意的。notifyAll(): 唤醒全部:可以将线程池中的所有wait() 线程都唤醒。其实,所谓唤醒的意思就是让 线程池中的线程具备执行资格。必须注意的是,这些方法都是在同步中才有效。同时这些方法在使用时必须标明所属锁,这样才可以明确出这些方法操作的到,底是哪个锁上的线程。