美文网首页
Java 线程执行过程, 线程资源共享

Java 线程执行过程, 线程资源共享

作者: 攻城狮托马斯 | 来源:发表于2020-05-12 15:50 被阅读0次

    Interrupt(), isInterrupted()


    在Sleep(), wait()等操作中, 如果线程被Interrupt,会抛出InterruptedException

    InterruptedException会把interruptted标志位由True改为False, 因此,需要在catch(InterruptedException e)中, 手动interrupt();

    这样的好处是,在手动Interrupt之前,可以释放当前线程持有的资源。

    Run(), Start()


    UseThread thread = new UseThread(); //新建一个线程Object

    thread.start() //只能被调用一次,线程Object开始和运行挂钩

    thread.run()//可以被调用多次, 线程开始运行

    如果线程不start直接run, 那么用来执行run()这个任务的可能是其他的线程.

    线程执行的全过程


    Yield(): 让CPU让出线程的占有权, 从CPU中退出, 不一定会释放该线程持有的锁,因为线程可能不持有锁

    (yield();)

    Join(): A.join(), 让主线程先wait()挂起, 等执行完A线程的时候再继续执行. 底层以wait()实现, 释放主线程自身的锁. 

    Join还可以保证任务按顺序执行,只有A执行完成了之后,主线程才能执行完.

    setPriority(): 只能设置Priority但是真正的不一定有用.

    setDaemon(): 用户启动的线程基本都是非守护线程,

    而由JDK使用的为守护线程, 用户后台资源调度等.

    守护线程中finally方法并不一定起作用,因为一旦主线程退出,守护线程就马上也退出了。

    线程线资源共享


    synchronize关键词

    Object 对象锁

    可以加在方法或者代码块上,都是对Object加锁

    Class 类锁

    放在static方法或者对象中的锁

    相关文章

      网友评论

          本文标题:Java 线程执行过程, 线程资源共享

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