线程并发安全问题:synchronized关键字,线程安全锁、同步监视器。
多线程在访问同一个数据时(写操作),可能会引发不安全操作。
①哪个线程报错不捕获,则线程死,不影响主程序。
②同步:同一时刻只能有一个执行,A和B配合工作,步调一致的处理(B得到A的执行结果才能继续)。如一群人上公交车。
异步:同一时刻能有多个执行,并发,各自干各自的。如一群人上卡车。
③synchronized可以修饰方法也可以单独作为语句块存在(同步块)。作用是限制多线程并发时同时访问该作用域。
④synchronized修饰方法后,会为方法上锁。方法就不是异步的了,而是同步的。锁的是当前对象。
⑤synchronized同步块:分析出只有一段代码需要上锁,则使用。效率比直接修饰方法要高。
⑥线程安全的效率低,如Vector、Hashtable。线程不安全的效率高,如ArrayList、HashMap
synchronized void getMoney(int money){ if(count==0){
throw new RuntimeException("余额为0"); }
Thread.yield(); count-=money; }
void getMoney(int money){
synchronized(this){//synchronized(Object){需要同步的代码片段}
if(count==0){ throw new RuntimeException("余额为0"); }
Thread.yield(); count-=money; }
13)Daemon后台线程也称为守护线程:当当前进程中“所有”“前台”线程死亡后,后台线程将被强制死亡(非自然死亡),无论是否还在运行。
①守护线程,必须在启动线程前调用。
②main方法也是靠线程运行的,且是一个前台线程。
③正在运行的线程都是守护线程时,JVM退出。
14)wait/notify方法
这两个方法不是在线程Thread中定义的方法,这两个方法定义在Object中。两个方法的作用是用于协调线程工作的。
①等待机制与锁机制密切关联:wait/notify方法必须与synchronized同时使用,谁调用wait或otify方法,就锁谁!
②wait()方法:当条将不满足时,则等待。当条件满足时,等待该条件的线程将被唤醒。如:浏览器显示一个图片,displayThread要想显示图片,则必须等代下载线程downloadThread将该图片下载完毕。如果图片没有下杂完成,则dialpayThread可以暂停。当downloadThread下载完成后,再通知displayThread可以显示了,此时displayThread继续执行。
③notify()方法:随机通知、唤醒一个在当前对象身上等待的线程。
④notifyAll方法:通知、唤醒所有在当前对象身上等待的线程。
12)线程并发安全问题:synchronized关键字,线程安全锁、同步监视器。
多线程在访问同一个数据时(写操作),可能会引发不安全操作。
①哪个线程报错不捕获,则线程死,不影响主程序。
②同步:同一时刻只能有一个执行,A和B配合工作,步调一致的处理(B得到A的执行结果才能继续)。如一群人上公交车。
异步:同一时刻能有多个执行,并发,各自干各自的。如一群人上卡车。
③synchronized可以修饰方法也可以单独作为语句块存在(同步块)。作用是限制多线程并发时同时访问该作用域。
④synchronized修饰方法后,会为方法上锁。方法就不是异步的了,而是同步的。锁的是当前对象。
⑤synchronized同步块:分析出只有一段代码需要上锁,则使用。效率比直接修饰方法要高。
⑥线程安全的效率低,如Vector、Hashtable。线程不安全的效率高,如ArrayList、HashMap
synchronized void getMoney(int money){ if(count==0){
throw new RuntimeException("余额为0"); }
Thread.yield(); count-=money; }
void getMoney(int money){
synchronized(this){//synchronized(Object){需要同步的代码片段}
if(count==0){ throw new RuntimeException("余额为0"); }
Thread.yield(); count-=money; }
Daemon后台线程也称为守护线程:当当前进程中“所有”“前台”线程死亡后,后台线程将被强制死亡(非自然死亡),无论是否还在运行。
①守护线程,必须在启动线程前调用。
②main方法也是靠线程运行的,且是一个前台线程。
③正在运行的线程都是守护线程时,JVM退出。
14)wait/notify方法
这两个方法不是在线程Thread中定义的方法,这两个方法定义在Object中。两个方法的作用是用于协调线程工作的。
①等待机制与锁机制密切关联:wait/notify方法必须与synchronized同时使用,谁调用wait或otify方法,就锁谁!
②wait()方法:当条将不满足时,则等待。当条件满足时,等待该条件的线程将被唤醒。如:浏览器显示一个图片,displayThread要想显示图片,则必须等代下载线程downloadThread将该图片下载完毕。如果图片没有下杂完成,则dialpayThread可以暂停。当downloadThread下载完成后,再通知displayThread可以显示了,此时displayThread继续执行。
③notify()方法:随机通知、唤醒一个在当前对象身上等待的线程。
④notifyAll方法:通知、唤醒所有在当前对象身上等待的线程。