----------- ----------- ASP.Net+Android+IOS开发、<A">----------- .Net培训、期待与您交流!">----------- -----------
黑马程序员――多线程
一、 线程的定义
1. 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元.线程:就是进程中的一个独立的控制单元.线程在控制着进程的执行.
2. 一个进程中至少有一个线程.
3. java VM 启动的时候会有一个进程java.exe该进程中至少一个纯种负责java程序的执行而且这个线程运行的代码存在于main方法中该线程称之为主线程,扩展:其实jvm启动不止一个线程,还有负责垃圾回收机制的线程.
二、 多线程创建方式
1. 继承Thread
2. 实现Runnable接口
l 实现Runnable的好处:避免了java单继承的局限性,建议使用实现方式
l 继承Thread,线程代码存放在Thread子类的run方法中
l 实现Runnable,线程代码存放在接口子类的run方法中
三、 线程的安全问题
1. 为什么会出现安全问题
l 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一条线程参与进来执行,就导致共享数据的错误。
2. 解决办法:
l 对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他纯种不可以参与执行
3. 具体解决方案――同步代码块(synchornized)
l 同步的前提:1.必须有两个或两个以上的线程,2.必须多个线程同个锁
l 同步的保证:同步中只能有一个线程在运行
l 格式:只需要在运行的代码块上加上synchronized修饰符即可
l 锁:必须是同一个锁,锁可以是this,也可以是字符串“a”;
4. 应用同步代码块利弊
l 利:解决了多线程的安全问题
l 弊:多个线程每次执行都需要判断锁,较为消耗资源
5. 典型死锁
四、 线程间通信
1. 线程的各状态间关系
五、 多线程的join方法
多线程join方法:
void join() 等待该线程终止。
void join(long millis) 等待该线程终止的时间最长为 millis毫秒。
throws InterruptedException
特点:当A线程执行到B线程的join方法时,A就会等待B线程都执行完,A才会执行
作用: join可以用来临时加入线程执行;
六、 多线程优先级:yield()
yield():暂停当前正在执行的线程对象,并执行其他线程
setPriority(int newPriority):更改线程优先级
int getPriority() 返回线程的优先级。
String toString() 返回该线程的字符串表示形式,包括线程名称、优先级和线程组
(1)MAX_PRIORITY:最高优先级(10级)
(1)Min_PRIORITY:最低优先级(1级)
(1)Morm_PRIORITY:默认优先级(5级)
---------- ---------- ASP.Net+Android+IOS开发、<A">---------- .Net培训、期待与您交流!">---------- ----------