美文网首页
每日一题(线程方法)

每日一题(线程方法)

作者: simperLv | 来源:发表于2019-11-13 00:30 被阅读0次
    先看例题

    这个题其实以前毕业那会儿做过很多次了,过了这么久又忘了


    例题.png 选项.png 测试.png
    解析

    这里需要注意Thread的start和run方法
    用start方法才能真正启动线程,此时线程会处于就绪状态,一旦得到时间片,则会调用线程的run方法进入运行状态。
    而run方法只是普通方法,如果直接调用run方法,程序只会按照顺序执行主线程这一个线程。

    变形一下这个题
    变形.png

    这个题我被锁误导了,其实这里只有一个主线程,调用main,持有HelloSogou.class锁,那当然可以直接调用Sogou方法。

    第二,如果是t.statrt(),那么这个题,静态同步函数的锁是该类的字节码文件.class。此题中,main函数和Sogou方法都是static的,所以持有相同锁 HelloSogou.class ,那么,在main线程(main 是一个线程也是一个进程 )中又开了一个线程,调用Sogou方法,锁会冲突。

    网上大佬的分析是:调用main函数(一个线程),main函数开启另一个线程,并启动,但是main函数和Sogou方法是同一个锁,所以main函数执行完毕后才会释放锁,Sogou方法才会执行,这就是为什么,换成start,是HelloSogou。
    第三,将Sogou方法的锁改为其他.class锁,那么,HelloSogou和SogouHello都可能出现。因为没有互斥现象了,变为抢占式的了。

    相关文章

      网友评论

          本文标题:每日一题(线程方法)

          本文链接:https://www.haomeiwen.com/subject/uzmcictx.html