线程生命周期和同步监视器是什么

线程生命周期

新建Thread thread=new Thread();,用new关键字创建一个线程后,构造方法中将当前thread对象加入ThreadGroup,虚拟机为其分配内存。
就绪:调用线程实例的start(),JVM为其创建方法调用栈和程序计数器,线程何时开始运行取决于JVM里线程调度器的调度。
阻塞:如果处于就绪状态的线程获得了CPU,开始执行run方法的线程执行体,则该线程处于运行状态,如果计算机只有一个CPU,那么在任何时刻只有一个线程处于运行状态。当然,在一个多处理器的机器上,将会有多个线程并行执行;当线程数大于处理器数时,依然会存在多个线程在同一个CPU上轮换的现象。当一个线程开始运行后,它不可能一直处于运行状态(除非它的线程执行体足够短,瞬瞬间就执行结束了),线程在运行过程中需要被中断,目的是使其他线程获得执行的机会,线程调度的细节取决于底层平台所采用的策略。对于采用抢占式策略的系统而言,系统会给每个可执行的线程一个小时间段来处
理任务;当该时间段用完后,系统就会剥夺该线程所占用的资源源,让其他线程获得执行的机会。在选择下一个线程时,系统会考虑线程程的优先级。所有现代的桌面和服务器操作系统都采用抢占式调度策略,但一些小型设备如手机则可能采用协作式调度策略,在这样样的系统中,只有当一个线程调用了它的sleep或 yield方法后才会放弃所占用的资源一一也就是必须由该线程主动放弃所占用的资源。
以下情况线程将会进入阻塞:

  1. 线程调用sleep()方法主动放弃所占用的处理器资源
  2. 线程调用了一个阻塞时IO方法,在该方法返回之前,该线程被阻塞
  3. 线程试图获得一个同步监视器(对象),但该同步监视器正在被别的线程所持有。
  4. 线程正在等待某个通知(notify)
  5. 程序调用了线程的suspend将该线程挂起。容易导致死锁,尽量避免。
  6. 线程调用了另一个线程的join(),则当前线程被阻塞,直到调用了join()的线程执行完成为止。


死亡

  1. run或者call方法执行完成,线程正常结束
  2. 线程抛出一个未捕获的Exeption或者Error
  3. 直接调用线程的stop方法来结束该线程,容易导致死锁,不推荐使用。

同步监视器

synchronized (obj){            
//需要同步的代码
//obj是同步监视器
}
public synchronized void foo(){
//需同步的代码        
//当前对象this是同步监视器
}

《疯狂java讲义》:任何时刻只能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成之后,该线程会释放对该同步监视器的锁定。

我的理解:不同的线程有不同的锁,当一个同步监视器(对象)被一个线程上锁之后,其他调用该方法的线程都无法破解这把独一无二的锁,只能阻塞,等到那条线程对同步监视器解锁后,其他线程才可以进入方法,给同步监视器上锁。

那么死锁是什么概念呢?
条件:两个线程实例thread_1,thread_2,两个同步监视器objA, objB。
开始:thread_1中调用一个以objA为同步监视器的同步方法fooA,同时thread_2中调用一个以objB为同步监视器的同步方法fooB。下一步,在fooA中,thread_1准备调用以objB为同步监视器的同步方法,同时,在fooB中,thread_2准备调用以objA为同步监视器的同步方法。
此时开始出问题:由于objA和objB都被同时作为同步监听器,并且被上锁了,当thread_1想要对objB上锁的时候,发现objB已经被锁上了,并且还没解开,那么thread_1只能阻塞。同时thread_2想要对objA上锁的时候,也发现objA也被锁住了,也只能阻塞。两条线程同时阻塞,并且没有办法解锁,此时成为死锁。

public class Main {

    public static void main(String args[]){
        A a=new A();
        B b=new B();

        Thread thread_1=new Thread(new Runnable() {
            @Override
            public void run() {
                    a.fooA(b);
            }
        });
        Thread thread_2=new Thread(new Runnable() {
            @Override
            public void run() {
                b.fooB(a);
            }
        });

        thread_1.start();
        thread_2.start();
    }
}

class A{
    public synchronized void fooA(B b){
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        b.last();
    }
    public synchronized void last(){

    }
}
class  B{
    public synchronized void fooB(A a){
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        a.last();
    }
    public synchronized void last(){

    }
}

运行之后:



程序一直不能自动结束,需要手动停止,因为死锁导致阻塞。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容

  • 线程的生命周期全在一张图中,理解此图是基本: 一、新建和就绪状态 当程序使用new关键字创建了一个线程之后,该线程...
    千淘萬漉阅读 1,731评论 0 11
  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    小徐andorid阅读 2,805评论 3 53
  • 一、进程和线程 进程 进程就是一个执行中的程序实例,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程。...
    阿敏其人阅读 2,612评论 0 13
  • 我想说,我还是做不到在这里(公开微博号)发一些内容。 刚发了八九月的读书清单,以及和小朋友之间的故事,可还是内心没...
    清夢ivy阅读 581评论 0 0
  • 标题这句话是,我的青春3.0时期,心灵的领路人,李笑来老师说的。7年就是一辈子、把时间当做朋友、得到专栏,一路追随...
    知行合一王小宏阅读 225评论 0 3