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 2018-04-12 14:41  lahigh  阅读(87)  评论(0)    收藏  举报