Java 多线程------解决 实现Runnabel接口方式线程的线程安全问题 方式二:同步方法 +总结
方式二:同步方法
* 如果操作共享数据的代码完整的声明在一个方法中,我们不妨将此方法声明同步的
1 package bytezero.threadsynchronization;
2
3
4
5 /**
6 * 使用同步方法解决实现 Runnable接口的线程安全问题
7 *
8 * 关于同步方法的总结:
9 * 1.同步方法仍热涉及到同步监视器,只是不需要我们显示声明。
10 * 2.非静态的同步方法,同步监视器是:this
11 * 静态的同步方法,同步监视器是:当前类的本身
12 *
13 *
14 * @author Bytezero1·zhenglei! Email:420498246@qq.com
15 * create 2021-10-17 16:39
16 */
17 class WindowM2 implements Runnable{
18 private int ticket = 100; //Runnable 里面共用一个 private int ticket = 100;
19 @Override
20 public void run() {
21 while(true){
22
23 show();
24 }
25 }
26
27 //同步方法
28 private synchronized void show(){ //同步监视器 : this
29 // synchronized (this){ //同步代码块
30
31 if(ticket >0){
32 try {
33 Thread.sleep(100);
34 } catch (InterruptedException e) {
35 e.printStackTrace();
36 }
37 System.out.println(Thread.currentThread().getName()+ ":买票,票号为:"+ticket);
38 ticket--;
39 }
40 // }
41 }
42 }
43
44 public class Window2Method {
45 public static void main(String[] args) {
46 WindowM2 w2 = new WindowM2(); //一个对象 放入了三个 构造器中,共用了 100
47
48 Thread t1 = new Thread(w2);
49 Thread t2 = new Thread(w2);
50 Thread t3 = new Thread(w2);
51
52 t1.setName("窗口一");
53 t2.setName("窗口二");
54 t3.setName("窗口三");
55
56 t1.start();
57 t2.start();
58 t3.start();
59 }
60 }

.........
Java 多线程------解决 实现Runnabel接口方式线程的线程安全问题 方式二:同步方法 +总结的更多相关文章
- “全栈2019”Java多线程第十五章:当后台线程遇到finally
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java多线程第四章:设置和获取线程名称
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- java多线程解决生产者消费者问题
import java.util.ArrayList; import java.util.List; /** * Created by ccc on 16-4-27. */ public class ...
- Java多线程编程实战指南(核心篇)读书笔记(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- Java多线程系列--“基础篇”09之 interrupt()和线程终止方式
概要 本章,会对线程的interrupt()中断和终止方式进行介绍.涉及到的内容包括:1. interrupt()说明2. 终止线程的方式2.1 终止处于“阻塞状态”的线程2.2 终止处于“运行状态” ...
- java 多线程总结篇3之——生命周期和线程同步
一.生命周期 线程的生命周期全在一张图中,理解此图是基本: 线程状态图 一.新建和就绪状态 当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时它和其他的Java对象一样,仅仅由Jav ...
- 并发多线程学习(三)Java多线程入门类和接口
1 Thread类和Runnable接口 上一章我们了解了操作系统中多线程的基本概念.那么在Java中,我们是如何使用多线程的呢? 首先,我们需要有一个"线程"类.JDK提供了Th ...
- java多线程(三)-Executors实现的几种线程池以及Callable
从java5开始,类库中引入了很多新的管理调度线程的API,最常用的就是Executor(执行器)框架.Executor帮助程序员管理Thread对象,简化了并发编程,它其实就是在 提供了一个中间层, ...
- java多线程解决应用挂死的问题
这两天为了定位JBOSS老是挂死的问题,学习了一下JAVA多线程方面的知识,在此总结一下 1.在Java程序中,JVM负责线程的调度.线程调度是指按照特定的机制为多个线程分配CPU的使用权. 调度的模 ...
- java多线程系类:基础篇:05线程的等待与唤醒
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...
随机推荐
- vue mixin混入 全局混入 局部混入
<div id="app"> --{{nameName}} </div> // 全局混入 不需要注册 var m1 = Vue.mixin({ data() ...
- Fabric区块链浏览器(3)
本文是区块链浏览器系列的第五篇,项目完整代码在这里. 在上一篇文章中给浏览器增加了简单的用户认证,至此浏览器的基本功能就已经大致完成了. 在这片文章中,我将使用kratos对区块链浏览器器进行重构,使 ...
- Windows 堆管理机制 [3] Windows XP SP2 – Windows 2003 版本
3. Windows XP SP2 – Windows 2003 3.1 环境准备 环境 环境准备 虚拟机 32位Windows XP SP2 \32位Windows XP SP3 调试器 OllyD ...
- 从零开始配置vim(30)——DAP的其他配置
很抱歉这么久才来更新这一系列,主要是来新公司还在试用期,我希望在试用期干出点事来,所以摸鱼的时间就少了.加上前面自己阳了休息了一段时间.在想起来更新就过去一个多月了.废话不多说了,让我们开始进入正题. ...
- C++ Qt开发:TableWidget表格组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TableWi ...
- 21.13 Python 实现端口流量转发
端口流量转发(Port Forwarding)是一种网络通信技术,用于将特定的网络流量从一个端口或网络地址转发到另一个端口或地址.它在网络中扮演着一个非常重要的角色,在Python语言中实现端口转发非 ...
- C/C++ 反汇编:流程控制与循环结构
反汇编即把目标二进制机器码转为汇编代码的过程,该技术常用于软件破解.外挂技术.病毒分析.逆向工程.软件汉化等领域,学习和理解反汇编对软件调试.系统漏洞挖掘.内核原理及理解高级语言代码都有相当大的帮助, ...
- Swift中发布-订阅框架Combine的使用
Combine简介 Combine是一个苹果用来处理事件的新的响应式框架,支持iOS 13及以上版本. 你可以使用Combine去统一和简化在处理类似于target-action,delegate,k ...
- QQ音乐转 mp3 格式的链接,不需要下载任何软件
一.打开QQ音乐的官网 QQ音乐-千万正版音乐海量无损曲库新歌热歌天天畅听的高品质音乐平台! 二.随便找一首歌播放 三.打开后,就可以使用了
- 关于laravel路由无法访问(nginx)
laravel路由无法访问 被这个问题折腾了 好几次了,记录一下希望可以帮到后面的朋友 在laravel路由中配置好了之后无法访问的问题有可能是因为在本地服务配置的问题(我使用的是nginx服务器) ...