在上一篇博文中我说collection很重要单独写,这样并发也必须单独写,否则显得其不重要,但其实很重要。
What are threads!!!
Thread.sleep();暂时组织当前线程的活动多少多少毫秒
就比如你让程序执行了一个很久很久的操作,在这途中你无法终止它或者干其他事,就是得等他弄完才行,这忍不了。
Runnable r=()->{
try{
fori...
}
catch(...)
{}
};
Thread i= new Thread(r);
t.start();
这就是thread,thread可以共享东西,进程不行
interrupting threads
interrupt方法被用于一个线程的request终止,当interrupt方法被一个线程调用,线程进入被打断状态,这是一个boolean标志在每个线程里都有的!每个线程应当不时检查自己有没有被打断。
Thread.currentThread().isInterrupted(), 但进程首先会被异常terminate,然后还会被sleep||wait block,这时候也会异常
Thread States
New, Runnable, Blocked, Waiting, Timed waiting, Terminated
new一个线程,.start后开始进入Runnable状态,并不一定在run有操作系统决定何时在run,经常暂停让别人也跑跑很理想,让别人跑的时候将原来在跑的那个放入thread priorites.
所有现代桌面系统和服务器都是用抢先调度方式,小设备可以能使用合作调度,我在想我玩游戏经常切出来是不是导致他掉线的原因
Blocked and Waiting threads
- 原来我们想要一个别的线程里正在锁住的东西就会堵塞,获取了就不堵了
- 当我们线程等待另一个线程通知情况的调度,他就进入了等待状态,Object,wait或者Thread.join方法,或者等待一个锁,,在实践中与Blocked状态区别不大
- 很多方法有一个timeout参数,调用他们会是程序进入等待状态,要么时间结束要么正确接收。
Terminated Threads
- 自然死亡,run方法正常结束
- 由于抛出异常而意外死亡
你可以杀死一个进程使用它的stop方法,不许用
Thread:
* void join()
* void join(long millis)
* Thread.State getState
* void stop()
* void suspend()不建议使用
* void resume() 只有suspend会才调用,不许用!
ps:设计模式要忘记其形
Thread Properties
每个线程都有一个优先级,默认来说继承与创建它的那个优先级,你可以增加或者减小器优先级,从一到10,MIN1MAX10NOR5
每当有机会选择一个新的线程,它倾向于更高优先级的线程。然而,线程优先级高系统独立host plantform级别,
在jvm中,线程优先级被忽略了,所用线程具有相同的优先级
Daemon Threads
t.setDaemon(true)