1. 线程类实例变量的数据共享:


若:

-->则a、b、c各有实例数据;

若:

-->则a、b、c、d、e共享一个实例数据。

2. 对于临界资源(对象、或方法),使用synchronized关键字进行同步。
3. currentThread() -- 执行该代码行的时候,是哪个线程调用的;isAlive() -- 线程是否处于活动;sleep() -- 让线程进入睡眠。
4. 判断线程是否停止:
-- this.Interrupted();//当前线程(执行该代码的线程)是否已中断,执行后清除标识为false(第二次调用后返回false)
void main(String [] args){
Thread a = new Thread();
a.Interrupted();//返回Main对应的这个线程是否已中断
}
-- this.isInterrupted();//判断线程(this对应的线程--线程对象)是否已中断,执行后不清除标识。
public class MyThread extends Thread{
@override
public void run(){
...
}
}
void main(String [] args){
MyThread a = new MyThread();
a.isInterrupted();//返回的是a对应的MyThread线程是否已中断
}
5. (一般采取的Interrupt())把线程停止:
-- 线程中抛出InterruptedException,再catch;
-- return停止线程。
--* 在sleep状态下停止线程,会进入catch语句。
--* 用stop()释放锁会造成数据不一致(工作未完成时被结束)。
6. 暂停和恢复线程(不推荐使用的方法):
suspend()< -- >resume()
-- (缺点1:造成独占) 在使用synchronized关键字的方法中线程被挂起,则其他线程无法访问这个公共对象。
-- (缺点2:造成不同步) 线程中方法执行一般被挂起,工作未全部完成,导致数据不一致。
7. yield() 放弃当前的CPU资源,让其他线程占用CPU;放弃时间不确定。
8. 线程的优先级:
-- 继承性:线程A创建的线程B,具有与A一样的priority。
-- 随机性:尽量让高优先级的线程大部分执行完(不总是)
9. thread.setDaemon(true);该线程设置为守护线程。
posted on
浙公网安备 33010602011771号