javaSE 多线程,synchronized同步语句,保证多线程安全


Demo.java:

package cn.xxx.demo;
/*
 * 多线程并发访问同一个数据资源
 * 3个线程,对一个票资源,出售
 */
public class Demo {
	public static void main(String[] args) {
		//创建Runnable接口实现类对象
		Tickets t = new Tickets();
		//创建3个Thread类对象,传递Runnable接口实现类  (多线程)
		Thread t0 = new Thread(t);  // 创建线程
		Thread t1 = new Thread(t);
		Thread t2 = new Thread(t);
		
		t0.start();  // 开启线程
		t1.start();
		t2.start();
	}
}
Tickets.java(线程类,实现Runnable接口,重写run方法):
package cn.xxx.demo;
/*
 *  多线程可能会出现安全问题
 *  解决安全问题,同步技术
 *  公式:
 *    synchronized(任意对象){
 *      多个线程要操作的共享数据
 *    }
 *  
 */
public class Tickets implements Runnable{  // 实现Runnable接口
	
	private int ticket = 100;
	private Object lock = new Object();  // 共享的锁对象。 成员变量位置,所有线程可以共享该锁对象。
	
	public void run(){  // 重写run方法
		while(true){
			//线程共享数据,保证安全,加入同步代码块
			synchronized(lock){  // 同步。 同步可以保证线程安全,但却降低了运行效率。
				if( ticket > 0){
					try{
					   Thread.sleep(10);
					}catch(Exception ex){}
					System.out.println(Thread.currentThread().getName()+" 出售第 "+ticket--);
				}
			}
		}
	}
}


猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/80735554