java线程学习笔记

来源:互联网 发布:python buffer类型 编辑:程序博客网 时间:2024/05/29 14:29

本学习心得是为了加深自己的印象及以后回顾,如果能对你有些许帮助,那也是喜闻乐见。

一 创建方式:

 ① 重载Thread类里面的run函数:

    class MyThead extends Thread{
@Override
public void run() {
      //do your own job
}
 }

②用Runnable

     new Thread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub

}
}).start();


二 线程同步

  通过synchronized (flag)来实现,其中flag是object的对象锁,主要对应的函数是wait()  、notify() 、notifyall()。

 ①wait执行后所在线程就立刻从所在代码处开始等待状态,代码不再执行,等同一的对象锁发出notify或者也调用wait时,会重新从等待地方的代码位置开始运行。

②notify()后,代码不会离开停止,会一直运行到所在同步模块执行完毕,然后释放锁给其他等待进程使用。


三线程的停止

虽然Thread有函数suspend resume   sleep stop  finish.

但是java官方已经方式使用stop suspend resume  finish。只是保留了start.

推荐的停止方法有:使用标志来控制,使run函数自然运行结束。

但是这种情况在线程阻塞的情况下是无效的,

当线程处于非运行(Run)状态

当线程处于下面的状况时,属于非运行状态:

  • 当sleep方法被调用。

  • 当wait方法被调用。

  • 当被I/O阻塞,可能是文件或者网络等等。

    当线程处于上述的状态时,使用前面介绍的方法就不可用了。这个时候,我们可以使用interrupt()来打破阻塞的情况,如:

    public void stop() {        Thread tmpBlinker = blinker;        blinker = null;        if (tmpBlinker != null) {           tmpBlinker.interrupt();        }    }

    当interrupt()被调用的时候,InterruptedException将被抛出,所以你可以再run方法中捕获这个异常,让线程安全退出:

    try {   ....   wait();} catch (InterruptedException iex) {   throw new RuntimeException("Interrupted",iex);}



0 0