java单线程上锁,Java多线程详解 |
您所在的位置:网站首页 › 多线程加锁和单线程一样吗 › java单线程上锁,Java多线程详解 |
前言 最近工作有点忙,周末也一直在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 |