小工具      在线工具  汉语词典  css  js  c++  java

Java Join 学习

Java 额外说明

收录于:43天前

public class ThreadLocalTest implements Runnable {

    private static AtomicInteger counter = new AtomicInteger(100);
    private static ThreadLocal<String> threadInfo = new ThreadLocal<String>() {
        @Override
        protected String initialValue() {
            return "[" + Thread.currentThread().getName() + "," + counter.getAndIncrement() + "]";
        }
    };

    @Override
    public void run() {
        System.out.println("threadInfo value:" + threadInfo.get());
    }

    /**
     * join() 的作用: 让父线程等待子线程结束之后才能继续运行
     *
     * 子线程结束之后,"会唤醒主线程",父线程重新获取cpu执行权,继续运行。
     * 子线程结束后,子线程的this.notifyAll()会被调用,join()返回,父线程只要获取到锁和CPU,就可以继续运行下去了。
     *
     * 在调用 join() 方法的程序中,原来的多个线程仍然多个线程,并没有发生“合并为一个单线程”。
     * 真正发生的是调用 join() 的线程进入 TIMED_WAITING 状态,等待 join() 所属线程运行结束后再继续运行。
     *
     * @param args
     * @throws InterruptedException
     */

    public static void main(String[] args) throws InterruptedException {
        Thread thread1 = new Thread(new ThreadLocalTest());
        Thread thread2 = new Thread(new ThreadLocalTest());

        thread1.start();
        thread2.start();

//        thread1.join();
//        thread2.join();

        System.out.println("threadInfo value in main:" + threadInfo.get());
    }
    /**
     *  1。 注释掉 thread1.join() 和 thread2.join()的执行结果
     *   threadInfo value in main:[main,100]
         threadInfo value:[Thread-0,101]
         threadInfo value:[Thread-1,102]
     */

    /**
     *  2。 打开注释掉 thread1.join() 和 thread2.join()的执行结果
     *
         threadInfo value:[Thread-0,101]
         threadInfo value:[Thread-1,102]
         threadInfo value in main:[main,100]
     */
}

. . .

相关推荐

额外说明

模拟when().thenReturn()返回值不起作用

使用any()替换anyString()模拟参数的方法来修复它。 Mockito.when(eventRepository.findOneById(any())).thenReturn(Optional.of(sampleEventFromDb));

额外说明

⾯向对象有哪些特性

封装:封装把⼀个对象的属性私有化,同时提供⼀些可以被外界访问的属性的⽅法。 继承:继承是使⽤已存在的类的定义作为基础创建新的类,新类的定义可以增加新的属性或新的⽅法,也可以继承⽗类的属性和⽅法。通过继承可以很⽅便地进⾏代码复⽤。 关于继承有以下三个要点:

额外说明

MySQL数据库,从入门到精通:第九篇——MySQL子查询

MySQL数据库,从入门到精通:第九篇——MySQL子查询 第九篇 _子查询 1. 需求分析与问题解决 1.1 实际问题 1.2 子查询的基本使用 1.3 子查询的分类 2. 单行子查询 2.1 单行比较操作符 2.2 代码示例 2.4 CASE中的子查

额外说明

机器学习 第三节 第六课

[toc] Numpy 中的转置 转置是一种变换, 对于 numpy 中的数组来说, 就是在对角线方向交换数据, 目的也是为了更方便的去处理数据. 执行结果: 以上三种方法都可以实现二维数组转置的效果. 大家能够看出来, 转置和交换轴的效果一样.    

额外说明

【JavaEE】多线程案例-定时器

文章目录 1. 前言 2. 如何使用Java标准库提供的定时器 3. 如何自己实现一个定时器 3.1 构建 MyTimerTask 任务类 3.2 使用优先级队列来存储多个任务 3.3 实现 schedule 方法来添加任务 3.4 实现 Timer 类

额外说明

Vue中的set、delete方法在列表渲染中的使用

目录 数组中数据渲染后的修改、新增、删除问题 对象中数据渲染后的修改、新增、删除问题 不知大家是否有过类似的经历,比如说for循环渲染数组或者对象中的数据,渲染完成后,给数组或者对象添加、修改、删除数据后却没有在页面中渲染出来。 本篇就是来解释说明修改数

额外说明

【Java 基础篇】Java并发包详解

多线程编程是Java开发中一个重要的方面,它能够提高程序的性能和响应能力。然而,多线程编程也伴随着一系列的挑战,如线程安全、死锁、性能问题等。为了解决这些问题,Java提供了一套强大的并发包。本文将详细介绍Java并发包的各个组件,以及如何在多线程应用程

额外说明

【Java 基础篇】Java继承:打开面向对象编程的大门

继承是面向对象编程(Object-Oriented Programming,OOP)中的一个重要概念。在Java中,继承允许一个类(子类)从另一个类(父类)继承属性和方法。这种机制使得代码重用、扩展和维护变得更加容易。本篇博客将深入探讨Java中继承的概

额外说明

HTTP协议详解

目录 概述 特点 HTTP URL 详解 HTTP Request 请求 HTTP Response 响应 HTTP 状态码 HTTP 工作流程 概述 HTTP是HyperText Transfer Protocol(超文本传输协议)的缩写,是互联网上面

额外说明

cnpm安装项目时,解决无法加载文件 C:\Users\baoya\AppData\Roaming\npm\cnpm.ps1问题

问题 今天准备下载 Ant Design of Vue框架,但使用 cnpm install --save ant-design-vue报出如下的错误: 解决方案 在Windows右下角的输入框中输入 Windows PowerShell,右击,选择 管

ads via 小工具