java学习之多线程

1、概念:
(1)线程:进程可进一步细化为线程,是程序内部的一条执行路径。
(2)进程:程序执行的一次过程,正在运行的程序。
2、常用方法:
1、 start();启动线程,并执行相应run方法。

2、run();子线程需要重写的方法,需要在子线程中实现的代码逻辑写在其中。
3、 currentThread()静态的,调取当前线程。
4、 getName()获取此线程的名字。
5、 setName设置线程名称
6、 jield,当前线程放弃cpu执行权
7、 join,在A线程中调用B线程的join方法,表示执行到此方法,A线程停止执行,直到B线程执行完毕。A再执行join之后的代码。
8、isAlive() :判断当前线程是否还活着。
9、sleep(long l) ; 显示的让当前线程睡眠l毫秒Thead.currentThread.sleep(10);
10、
线程调度:时间片
抢占式:线程优先级:(1)MAX_PRIORITY (=10)
(2)MIN_PRIORITY(1)

(3) NORM_PRIORITY (5)默认

getPriority()获取当前线程优先级

setPriority()设置当前线程优先级setPriority(MAX_PRIORITY)/setPriority(10)

3、线程实现方式
1、继承 Thread类
java学习之多线程
文章图片


java学习之多线程
文章图片


2、实现Runnable接口
java学习之多线程
文章图片

4、多线程的优点、线程生命周期

优点:
1、提高应用程序的相应,对图形化界面意义重大,增加用户体验,
2、提高计算机系统cpu的利用率
3、改善程序结构,将极长又复杂的程序分为多个线程,独立运行,利于理解和修改。
线程的生命周期:
新建——就绪——运行——阻塞——死亡
java学习之多线程
文章图片



5、同步代码块与同步方法:
1、同步代码块:
synchronized(同步监视器/锁){
//需要被同步的代码块(操作共享数据的代码)

}

锁;由一个类的对象来充当,哪个线程获取次所,谁就执行大罗号里的被同步的代码。
在实现方式中,考虑同步的话,可以用this来充当锁,但是在继承的方式中,慎用this
2、同步方法:
public synchronized voidrun(){
}
java学习之多线程
文章图片


java学习之多线程
文章图片


6、单例模式之懒汉模式线程安全问题:
【java学习之多线程】java学习之多线程
文章图片


1、提
7、线程的死锁:
1、不同线程分别占用对方需要同步的资源不放弃,都在等待对方先放弃,形成死锁,
2、专门的算法解决死锁,或者尽量减少同步资源的定义来避免死锁。

java学习之多线程
文章图片


java学习之多线程
文章图片


8、线程通信:
wait()\notify()\notifyAll()--------->定义在Object中
1、wait()令当前线程挂起并放弃cpu执行权,和同步资源,使别的线程可访问和修改共用资源,而当前线程排队等候再次访问共用资源。

2、notify(),唤醒正在排队等候资源中优先级最高的线程。
3、notifyAll()唤醒全部线程。
java学习之多线程
文章图片

java学习之多线程
文章图片




    推荐阅读