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

2020-05-12  本文已影响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方法或者对象中的锁

上一篇下一篇

猜你喜欢

热点阅读