首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

(多线程)多线程的并发保险

2013-11-09 
(多线程)多线程的并发安全?多线程并发操作同一个资源?同步锁: 多线程操作的锁必须唯一?必须搞清楚:哪些代

(多线程)多线程的并发安全

?

多线程并发操作同一个资源

?

同步锁: 多线程操作的锁必须唯一

?

必须搞清楚:哪些代码需要同步?

那些在操作共享资源的代码,只要包含非读的操作,或者根据共享资源进行条件判断的,就需要同步!

?

同步代码块解决

?

package com.gc.thread;/** * 多线程操作共享资源---并发---线程安全问题---同步---锁---相对而言性能下降,但可接受 * 通过Runnable(的子类)封装共享资源 * 线程可能在run()中代码的任意位置被阻塞 * 控制线程的准入条件非常关键 --->同一把锁 *  * 涉及多线程并发,必须注意2点 * 1.多个线程操作同一个资源 * 2.使用同一个锁 */public class MutilThread implements Runnable {//共享的资源private int num = 1000;//唯一的锁Object mutex = new Object();@Overridepublic void run() {while(true) {//锁只要没释放,其它线程就无法进入--弊端:消耗资源//synchronized (this) {synchronized (mutex) {try {if(num<=0)break;doJob();} catch (InterruptedException e) {e.printStackTrace();}}}}public void doJob() throws InterruptedException {Thread.sleep(10);System.out.println(Thread.currentThread().getName()+"--->"+ (num--));}}

?

开启多线程,操作共享资源num

package com.gc.thread;public class Demo {public static void main(String[] args) {MutilThread runnable = new MutilThread();//传入同一个Runnable接口子类对象,让多线程操作Runnable中封装的共享资源Thread a = new Thread(runnable);Thread b = new Thread(runnable);Thread c = new Thread(runnable);Thread d = new Thread(runnable);//开启线程  【注意:一个线程只能调用1次start(),多次调用将抛"线程运行状态异常"】a.start();b.start();c.start();d.start();}}

?

热点排行