记录一下学习使用lock进行多线程编程以及lamdda表达式应用,话不多说直接贴代码。
package com.lvl.testdemo;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
-
题目:三个售票员 卖出 30张票
-
笔记:如何编写企业级的多线程代码
-
固定的编程套路+模板是什么?
-
(什么是高内聚低耦合?)
-
1.在高内聚低耦合的前提下,线程 操作 资源类
-
1.1先创建一个资源类
*/
//资源类 票
class Ticket{ //实例变量 + 实例方法
private int number = 30; //票的数量
//买票
//ReentrantLock 锁的实现类 可重用锁
Lock lock = new ReentrantLock();
public void sale(){
lock.lock();
try{
if (number > 0){
System.out.println(Thread.currentThread().getName()+"\t卖出第:"+(number–)+"\t还剩下:"+number);
}
}catch (Exception e){
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
public class JucTestDemo {public static void main(String []args){
Ticket ticket = new Ticket(); //使用lambda表达式 new Thread(() ->{for (int i= 1;i<40;i++) ticket.sale();},"A").start(); new Thread(() ->{for (int i= 1;i<40;i++) ticket.sale();},"B").start(); new Thread(() ->{for (int i= 1;i<40;i++) ticket.sale();},"C").start();
// new Thread(new Runnable() {
// @Override
// public void run() {
// for (int i= 1;i<40;i++){
// ticket.sale();
// }
// }
// }, “A”).start();
// new Thread(new Runnable() {
// @Override
// public void run() {
// for (int i= 1;i<40;i++){
// ticket.sale();
// }
// }
// }, “B”).start();
// new Thread(new Runnable() {
// @Override
// public void run() {
// for (int i= 1;i<40;i++){
// ticket.sale();
// }
// }
// }, “C”).start();
}
}