Java线程基础

1 知识点

  • 概念理解:程序、进程、线程
  • 单线程 和 多线程
  • 并发 和 并行
  • 线程的使用:继承Thread类 和 实现Runnable接口
  • Thread类 VS 实现Runnable接口
  • 线程常用方法
  • 用户线程 和 守护线程
  • 线程的生命周期
  • 线程同步机制
  • 互斥锁
  • 线程死锁
  • 释放锁 和 不释放锁的情况

2 手写笔记

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3 代码演示窗口售票

  • 代码:
package threaduse;

/**
 * @author Li
 * @data 2022/3/20 - 14:49
 */

public class SellTicket {
    public static void main(String[] args) {
        SellTicket01 sellTicket01 = new SellTicket01();
        SellTicket01 sellTicket02 = new SellTicket01();
        SellTicket01 sellTicket03 = new SellTicket01();

        sellTicket01.start();
        sellTicket02.start();
        sellTicket03.start();
    }
}

class   SellTicket01 extends Thread{

    // 100张
    private sttic int TicketNum = 10;

    @Override
    public void run(){
        while(true){

            if(TicketNum <= 0){
                System.out.println("====售票结束====");
                break;
            }

            System.out.println("窗口1" + Thread.currentThread().getName() + "售出1张票(剩余" + (--TicketNum) + "张)");

            //休眠50毫秒
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }


        }
    }


}

  • 输出结果分析:
    ](https://img-blog.csdnimg.cn/d44ce6f24d834cf1b9a9620d11382246.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGFieXJpbnRoLg==,size_20,color_FFFFFF,t_70,g_se,x_16)

4 解决多线程售票问题——synchronized关键字

package threaduse;

/**
 * @author Li
 * @data 2022/3/20 - 14:49
 */

public class SellTicket {
    public static void main(String[] args) {
//        SellTicket01 sellTicket01 = new SellTicket01();
//        SellTicket01 sellTicket02 = new SellTicket01();
//        SellTicket01 sellTicket03 = new SellTicket01();
//
//        sellTicket01.start();
//        sellTicket02.start();
//        sellTicket03.start();
        SellTicket01 sellTicket04 = new SellTicket01();

        // 要求多个线程的锁对象为同一个。

        new Thread(sellTicket04).start();
        new Thread(sellTicket04).start();
        new Thread(sellTicket04).start();

    }
}

//使用synchronized实现线程同步:
class   SellTicket01 extends Thread{

    // 100张
    private static int ticketNum = 10;
    private static boolean loop = true;

    // 卖票函数
    // 同步方法
    public synchronized void sell(){

            if (ticketNum <= 0) {
                System.out.println("====售票结束====");
                loop = false;
                return;
            }

            //休眠50毫秒
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            System.out.println("窗口1" + Thread.currentThread().getName() + "售出1张票(剩余" + (--ticketNum) + "张)");
    }
    @Override
    public void run(){
        while(loop) {
            sell();
        }
    }


}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值