6、JUC系列之---Concurrent

一、卖票

需求:三个人卖30张票

代码:

package com.lee.juc.concurrent;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class SaleTicket {

	public static void main(String[] args) {
		
		Ticket ticket = new Ticket();
		
		new Thread(new Runnable() {
			public void run() {
				for(int i=0;i<100;i++) {
					ticket.sale();
				}
			}
		},"AA").start();
		
		new Thread(new Runnable() {
			public void run() {
				for(int i=0;i<100;i++) {
					ticket.sale();
				}
			}
		},"BB").start();
		
		new Thread(new Runnable() {
			public void run() {
				for(int i=0;i<100;i++) {
					ticket.sale();
				}
			}
		},"CC").start();
		
	}
}

//票
class Ticket{
	
	private int num=30;
	private Lock lock = new ReentrantLock();
	
	public void sale() {
		lock.lock();
		try {
			if(num>0) {
				System.out.println(Thread.currentThread().getName()+".....sale ticket number : "+num--);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			lock.unlock();
		}
	}
	
}

用lambda写:

package com.lee.juc.concurrent;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class SaleTicket {

	public static void main(String[] args) {
		
		Ticket ticket = new Ticket();
		
		new Thread(()->{for(int i=0;i<100;i++) {ticket.sale();}},"AA").start();
		new Thread(()->{for(int i=0;i<100;i++) {ticket.sale();}},"BB").start();
		new Thread(()->{for(int i=0;i<100;i++) {ticket.sale();}},"CC").start();
		
	}
}

//票
class Ticket{
	
	private int num=30;
	private Lock lock = new ReentrantLock();
	
	public void sale() {
		lock.lock();
		try {
			if(num>0) {
				System.out.println(Thread.currentThread().getName()+".....sale ticket number : "+num--);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			lock.unlock();
		}
	}
	
}

猜你喜欢

转载自my.oschina.net/u/3551274/blog/1814060