Java笔记--多线程
1、线程的创建与运行(方式一):
--1)创建一个Thread的子类;
--2)重写Thread类的run()方法;
--3)创建一个子类的对象;
--4)调用线程的start()方法来启动线程,Java虚拟机将调用run()方法。
public class TestThread { public static void main(String[] args) { // TODO Auto-generated method stub SubThread st = new SubThread(); st.start(); System.out.println("---MainThread---"); } } class SubThread extends Thread{ @Override public void run() { System.out.println("---SubThread---"); } }
2、Thread的常用方法:
--1)start(); //启动线程
--2)run(); //子线程要执行的代码写在该方法中
--3)currentThread(); //静态方法,调取当前线程
--4)getName(); //获取当前线程名称
--5)setName(); //设置当前线程名称
--6)yield(); //释放当前CPU执行权
--7)join(); //在A线程中调用B线程的join()方法,此时A线程停止执行,B线程开始执行,直到B执行完毕A再继续执行
--8)isAlive(); // 判断当前线程是否为活动的
--9)sleep(long l);//显示的让当前线程睡眠l毫秒
--10)线程通信:wait(),notify(),notifyAll()
--11)优先级:getPriority(),setPriority()
3、方式二:
--1)创建一个类,该类需实现Runnable接口;
--2)实现Runnable接口的抽象方法run();
--3)创建实现类对象;
--4)将此对象作为形参传递给Thread类的构造器中,创建Thread类对象;
--5)调用start()来启动线程。
4、方式二优于方式一,即实现的方式优于继承的方式,因为实现的方式避免了Java单继承的局限性而且更易于共享数据。
5、使用多线程的优点:
--1)提高应用程序的响应;
--2)提高计算机系统CPU的利用率;
--3)改善程序结构。
6、线程分类:1)守护线程;2)用户线程。
7、线程的生命周期:1)新建;2)就绪;3)运行;4)阻塞;5)死亡。
8、线程的同步:
--1)同步代码块;
synchronized(同步监视器){ //需要被同步的代码 }
--2)同步方法:将操作共享数据的方法声明为synchronized。
9、死锁:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源。解决的方法:
--1)专门的算法、原则;
--2)尽量减少同步资源的定义。
10、线程的通信:
--wait():令当前线程挂起并放弃CPU、同步资源,使别的线程可访问并修改共享资源,二当前线程排队等候再次对资源的访问;
--notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待;
--notifyAll():唤醒正在排队等待资源的所有线程结束等待。
--注:上诉三个方法只有在synchronized方法或者synchronized代码块中才能调用,否则会出现异常(java.lang.IllegalMonitorStateException)