java单线程上锁,Java多线程详解

您所在的位置:网站首页 多线程加锁和单线程一样吗 java单线程上锁,Java多线程详解

java单线程上锁,Java多线程详解

2024-03-22 03:32| 来源: 网络整理| 查看: 265

前言

最近工作有点忙,周末也一直在996加班,所以没有时间来写博客,今早忙里偷闲来写一下多线程的第二篇。

废话不多说,开始这次的主题。

复习

上一张我们学习了Java多线程的基础知识。回顾一下:

1:实现多线程的两种方式,继承Thread类以及实现Runable接口,然后重写里面的run方法即可。

2:线程的状态:

新建状态,就绪状态,运行状态,阻塞状态,死亡状态。

其中最重要的地方,也是难点就是线程的阻塞状态,线程在什么情况下会进入阻塞状态,如何解除阻塞状态。

3:线程的调度:

线程的优先级,线程睡眠,线程等待,线程让步,线程加入,线程唤醒。

这些都有相应的方法我再上一篇也都提到过。

4:线程中的常用函数:

sleep(long millis),join(),yield(),setPriority(),interrupt(),wait(),notify(),notifyAll()。

前面都讲过了,后面的interrupt(),wait(),notify(),notifyAll()这几个方法会结合今天的锁和中断来讲一下如何使用。

线程锁

首先来说说为什么要加锁。这里就要提到了共享资源这个话题,比如说:一个卖票系统,售票员有三个,总共有100张票,那么共享资源就是这100张票,有三个线程在一起消费它,当这100张票卖完时,三个线程就都得停止了。

我们都知道,线程在CPU中的机制时竞争机制,也就是说谁抢到了下一张票,谁就卖下一张票。但是要注意的是,当线程一抢到要卖的下一张票,准备抢占CPU资源运行时,线程二抢到了下一张票,并且抢到了CPU的资源,那么就会提前将下一张票卖出。这样就会导致票的顺序呗打乱。

可能我文字描述不太清楚,上一段代码看看。

class Count{

public static int count = 100;

}

@Data

class TicketThread implements Runnable{

private String name;

public TicketThread(String name){

super();

this.name = name;

}

@Override

public void run(){

int all = 1;

while (Count.count >0){

System.out.println(this.getName()+":::卖出了"+(all++)+"张,还剩"+ (--(Count.count))+"张");

}

}

}

class main{

public static void main(String[] args){

new Thread(new Ticket



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3