- public enum State {
- //新生
- NEW,
-
- //运行
- RUNNABLE,
-
- //阻塞
- BLOCKED,
-
- //等待
- WAITING,
-
- //超时等待
- TIMED_WAITING,
-
- //终止
- TERMINATED;
- }
wait=>Object类
sleep => Thread类
wait 会释放锁,
sleep 睡觉了,抱着锁睡觉,不会释放!
wait 必须在同步代码块中使用
sleep 可以在任何地方睡
wait 需要捕获异常
sleep 也需要抛出异常
- package com.kuang.lock;
- //基本的卖票例子
-
- /**
- * 真正的多线程开发,公司中的开发,降低耦合性
- * 线程就是一个单独的资源类,他没有任何附属的操作!
- * 1.属性 、方法
- */
- public class SaleTicketDemo01 {
- public static void main(String[] args) {
- //并发:多线程操作同一个资源类,把资源类丢入线程。
- Ticket ticket = new Ticket();
- //@FunctionalInterface 函数式接口 ,jdk1.8 Lambda表达式 (参数) -> {代码}
- new Thread(()->{
- for (int i = 0; i < 60; i++) {
- ticket.sale();
- }
- },"A").start();
- new Thread(()->{
- for (int i = 0; i < 60; i++) {
- ticket.sale();
- }
- },"B").start();
- new Thread(()->{
- for (int i = 0; i < 60; i++) {
- ticket.sale();
- }
- },"C").start();
-
-
-
-
- }
-
-
-
- }
-
- // 资源类 OOP
- class Ticket{
- // 属性、方法
- private int number=50;
- //卖票的方式
- public synchronized void sale(){
- if (number>0){
- System.out.println(Thread.currentThread().getName()+":卖出第"+(number--)+"张票,还剩"+number+"张票");
- }
- }
-
-
- }



new FairSync()公平锁
new NonfairSync()非公平锁
公平锁:十分公平,可以先来后到
非公平锁:十分不公平,可以插队(默认)
3秒 和 3小时的 如果公平锁 3秒中必须等3小时之后才能执行,
但是插队的话,就是谁抢到,谁执行,而且是有锁的。
- package com.kuang.lock;
-
- import java.util.concurrent.locks.Lock;
- import java.util.concurrent.locks.ReentrantLock;
-
- public class SaleTicketDemo02 {
- public static void main(String[] args) {
- //并发:多线程操作同一个资源类,把资源类丢入线程。
- Ticket2 ticket = new Ticket2();
- new Thread(()->{for (int i = 0; i < 60; i++) ticket.sale();},"A").start();
- new Thread(()->{for (int i = 0; i < 60; i++) ticket.sale();},"B").start();
- new Thread(()->{for (int i = 0; i < 60; i++) ticket.sale();},"C").start();
- }
- }
-
- // 资源类 OOP
- class Ticket2 {
- // 属性、方法
- private int number = 50;
-
- //卖票的方式
- //lock
- Lock lock =new ReentrantLock();
-
-
- public void sale() {
-
- lock.lock();//加锁
-
- try {
- //业务代码
- if (number > 0) {
- System.out.println(Thread.currentThread().getName() + ":卖出第" + (number--) + "张票,还剩" + number + "张票");
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- lock.unlock();//解锁
- }
- }
- }
提问?:锁是什么?如何判断锁的是谁!