首页 > 编程语言 >java多线程学习之路-不能理解

java多线程学习之路-不能理解

时间:2023-11-24 18:24:38浏览次数:41  
标签:java Thread myData 之路 int new 20 多线程

 1 import java.util.concurrent.CountDownLatch;
 2 
 3 /**
 4  * 颠覆理解的,为什么不会出问题,执行多次,结果都是正确,并且一致
 5  */
 6 class MyData {
 7     int a = 5;//可预定总座位数
 8     int b = 0;//已预定座位数
 9 
10     public void yd() {
11         if (b < a) {
12             b++;
13             System.out.println("预定成功");
14         }
15     }
16 }
17 
18 public class Demo {
19 
20     public static void main(String[] args) throws InterruptedException {
21 
22         MyData myData = new MyData();
23         System.out.println(myData.b);
24 
25 //        CountDownLatch countDownLatch = new CountDownLatch(20);
26         for (int i = 0; i < 20; i++) {
27             new Thread(() -> {
28                 for (int j = 0; j < 10000; j++) {
29                     myData.yd();
30                 }
31 //                countDownLatch.countDown();
32             }).start();
33         }
34 //        countDownLatch.await();
35         while (Thread.activeCount() > 2) {
36             Thread.yield();
37         }
38         System.out.println(myData.b);
39     }
40 
41 }

 

我指定了一个资源类,并且创建20个线程操作同一个资源,没有加锁,也没有使用原子类,为什么每次执行的结果正确并且一致,和我平时理解的多线程不一样
希望看到这篇博客的高手给予我帮助

标签:java,Thread,myData,之路,int,new,20,多线程
From: https://www.cnblogs.com/luoq996/p/17854458.html

相关文章

  • Java Web实现文件下载的几种方式
    文件下载可以说是网站的基础功能,要实现最下载功能,有一种最基本的方法,那就是将超链接的href属性指向对应的资源文件。如下面连接指向了百度首页的图片:​ ​I'mtheindexofBaidu​​但这种方式的缺陷也是很明显的,目录信息被获取,不利于信息安全。其实信息安全还是其次,主要还是......
  • JAVA进阶 —— 方法引用
    原文链接:https://blog.csdn.net/hdakj22/article/details/129453599一、内容概述方法引用可以拆分为方法和引用两方面:方法引用:把已经有的方法拿过来用,当作函数接口中抽象方法的方法体。::(方法引用符)但是要注意:并不是所有的方法都可以直接引用,需要满足以下四种条件引用......
  • JavaScript数组中的常用函数解析
    1.splice方法当使用splice()方法时,可以传递不同的参数来实现不同的操作。以下是splice()方法的参数说明:array.splice(start,deleteCount,item1,item2,...);start:必需,指定要进行操作的起始索引位置。如果该值为负数,则表示从数组末尾开始计算的偏移量。例如,-1表示倒数第......
  • java 关于 Finalizer 过多导致内存(Res)缓慢上涨
     病因:事情的起因是由Flume的项目采集问题引发的.测试人员发现用top命令查看采集进程的Res一直不断上涨姿势.所以怀疑是内存泄漏.  一,对症下药首先,第一步肯定是先瞅瞅代码,看看有没有那些资源啥的没关闭,正如读者所想----没有发现.二,通过辅助工具最......
  • 这篇保证你彻底搞懂Java NIO的Selector事件选择器
     Selector提供选择执行已经就绪的任务的能力,使得多元I/O成为可能,就绪选择和多元执行使得单线程能够有效率地同时管理多个I/Ochannel。C/C++许多年前就已经有select()和poll()这两个POSIX(可移植性操作系统接口)系统调用可供使用。许多os也提供相似的功能,但对Java程序......
  • C++11 多线程(std::thread)实例
    C++11的std::thread在C中已经有一个叫做pthread的东西来进行多线程编程,但是并不好用(如果你认为句柄、回调式编程很实用,那请当我没说),所以c++11标准库中出现了一个叫作std::thread的东西。std::thread常用成员函数构造&析构函数举个栗子例一:thread的基本使用1//Compiler:......
  • Java实验报告五
    实验五实验名称:文件与I/O流实验目的:掌握文件与输入输出流的使用。实验时间:(2学时)实验类型:验证型实验内容:1.创建类:FindFile.java,遍历当前目录,打印目录中文件名称,目录打印”isDirectory”,文件打印“isfile”。修改程序打印当前目录及子目录信息。提示:当前目录名用......
  • JavaWeb中的文件的上传和下载
    文件上传1.要有一个form标签,method=post请求2.form标签的encType属性的值必须为multipart/form-data值3.在from标签中使用inputtype=file添加上传的文件4.编写服务器代码接收上传的数据Content-Type:表示提交的数据类型enctype="multipart/form-data":表示提交的数据,以多段(每......
  • Java线程生命周期
    操作系统线程生命周期操作系统线程生命状态有5种。初始状态(New)进程正在被创建时的状态。仅为线程对象开辟了一块堆内存,实际上线程在操作系统层面还未创建。就绪状态(Ready)可运行,由于其他进程处于运行状态而暂时停止运行运行状态(Running)该进程此时正占用CPU......
  • Java实验报告
    实验一实验名称:JAVA中循环结构实验目的:熟悉循环结构,熟悉JAVA类的定义以及参数的传递。实验时间:(2学时)实验类型:验证型实验内容:(1)金字塔:Pyramid.java在屏幕上显示一个由星型符号“*”组成的金字塔图案,要求用户设置金字塔的高度,程序能根据用户设置的高度打印金字塔,......