java编程思想笔记-并发之后台线程

1000个并发线程,10台机器,每台机器4核,设计线程池大小 这是why哥的第 71 篇原创文章 一道面试题 兄弟们,怎么说? 我觉得如果你工作了两年左右的时间,或者是突击准备了面试,这题回答个八成上来,应该是手到擒来的事情。这题中规中矩,考点清晰,可以说的东西不是很多。 但是这都上血书了,那不得分析一波? 先把这个面试题拿出来一下: 1000 多个并发线程,10 台机器,每台机器 4 核,设计线程池大小。 这题给的信息非常的简陋,但是简陋的好处就是想象空间足够大。 第一眼看到这题的时候,我直观的感受到了两个考点: 线程池设计。 负载均衡策略。 我就开门见山的 阅读详情
package com.tij.chapter1;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
/**
 * 
 * @author Allen
 * @date 2017-8-7
 *
 */
class DaemonThreadFactory implements ThreadFactory {
    @Override
    public Thread newThread(Runnable r) {
        Thread thread = new Thread(r);
        thread.setDaemon(true);
        return thread;
    }
}

class DaemonFromFactory implements Runnable {

    private String threadName;
    private CountDownLatch latch;

    public DaemonFromFactory(int i, CountDownLatch latch) {
        this.threadName = "thread-" + i;
        this.latch = latch;
    }

    @Override
    public void run() {
            while (true) {
                try {
                    TimeUnit.MILLISECONDS.sleep(100);
                    System.out.println(Thread.currentThread() + "--" + this);
                    System.out.println("count--" + latch.getCount());
                } catch (Exception e) {
                    e.printStackTrace();
                }finally{
                    latch.countDown();
                }

            }

    }

    @Override
    public String toString() {
        return threadName;
    }

}

public class DaemonTest {

    public static void main(String[] args) {
        CountDownLatch latch = new CountDownLatch(10);
        ExecutorService exec = Executors
                .newCachedThreadPool(new DaemonThreadFactory());
        for (int i = 0; i < 10; i++) {
            exec.execute(new DaemonFromFactory(i, latch));
        }
        System.out.println("All Threads Start");
        try {
            //latch.await(500, TimeUnit.MILLISECONDS);
            latch.await();
            //Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //主线程完成,则后台线程也全部中断
        System.out.println("Task Stopped");
    }
}

后台线程的finally语句不会执行,因为父线程即main线程执行结束后,jvm会关闭所有线程,可以通过Executor来实现有序的关闭线程

《Java并发编程之美》阅读笔记 简介 最近在阅读《Java并发编程之美》这本书,为了督促自己啃完这本书,计划每读完一章写一篇阅读笔记,供以后参考 笔记列表 第一部分 Java并发编程基础篇 第1章 并发编程线程基础 第2章 并发编程的其他基础知识 第二部分 Java并发编程高级篇 第3章 Java并发包中的ThreadLocalRandom类原理剖析 第4章 Java并发包中原子操作类原理剖析 第5章 J... 阅读详情

相关推荐

java编程思想(读书笔记):21.并发

到目前为止,你学到的都是有关 顺序编程 的知识。即程序中的所有事物在任意时刻都只能执行一个步骤。 下面我们应该学一学并发编程吧。并发“具有可论证的确定性,但是实际上具有不可确定性”。实际上,你可能无法编写出能够针对你的并发程序生成故障条件的测试代码。Web系统是最常见的Java应用系统之一,而基本的Web库类,Servlet具有天生的多线程性–这很重要,因为Web服务器经常包含多个处理器,而并发是充

1162

Java编程思想之多线程(二)

上一篇回顾了多线程的一些理论知识,并遗留了几个问题:Q1:内核线程和用户线程都有哪些关系?Q2:用户线程如何映射到内核线程?Q3:程序(program)和进程的关系又是怎样的?下面对它们逐一解答。内核线程和用户线程对比用户线程内核线程由用户实现由OS实现对OS透明OS负责管理内核线程,对之了如指掌通过语言包的SDK实现线程很容易内核线程实现负责线程上下文切换需要很少的时间内核线程切换需要很长的时间...

weixin_33875564的博客 181

Java线程的并发及并行

并发与并行并发与并行的区别并发概念临界资源和临界区什么是线程安全?并发的特性原子性可见性有序性 并发与并行的区别 并发是指多个线程操作同一个资源,不是同时执行,而是交替执行。单核CPU,只不过因为CPU的时间片很短,速度太快,看起来是同时执行。 并行才是真正的同时执行,多核CPU。每个线程使用一个单独的CPU的资源来运行。 并发示意图: 并行示意图: 但在多数情况下,我们的即使有多核,也同样存在并行的情况,且存在并行与并发同时存在的情况。 并发概念 Java并发的重要性毋庸置疑,可以最大化的提高计算资源

JSDHBIV的博客 1083

java编程思想之并发(认识多线程)

原创内容本人公众号:Android开发吹牛皮 个人站点:chaodongyang.com编程问题中的相当一大部分都可以通过顺序编程来解决。然而,对于某些问题,如果能够并行的执行程序中的多个部分,则会变得非常方便甚至非常必要,这些部分要么可以并发执行,要么在多处理器环境下可以同时执行。并发编程可以使程序执行速度得到极大的提高,或者为设计某些类型的程序提供更简单的模型。学习并发编程就像进入一个全新的领

cdy的博客 公众号:Android开发吹牛皮 516

Excel数据清洗实战:8个必学函数搞定90%的脏数据问题(附案例)

本文通过一个完整的销售数据清洗案例,详细讲解了如何组合使用TRIM、CLEAN、SUBSTITUTE等8个核心Excel函数,构建自动化清洗流水线,高效解决日常办公中90%的脏数据问题,从而将时间留给更有价值的分析工作。

weixin_29215391的博客 584

滞回比较器电路详细分析

滞回比较器是一种用于检测两个不同电压值并使比较器输出高电平或低电平的电路。滞回比较器的特点是具有迟滞特性,即当输入电压高于某一阈值时,比较器输出高电平,当输入电压低于另一阈值时,比较器输出低电平,而在这两个阈值之间,比较器的输出保持不变。比较器通常有两个模拟电压输入端UIN+和UIN-以及一个数字状态输出端UOUT。当UIN+大于UIN-时,UOUT为高电平;当UIN+小于UIN-时,UOUT为低电平。根据具体的系统定义,这两种电位的具体数值可以有所不同。

LuDvei的博客 2万+

Java编程思想之多线程(一)

多线程技术是个很庞大的课题,《Java编程思想》这本书(英文版,以下简称TIJ)中也用了136页介绍Java的多线程体系。的确,Java语言发展到今天,多线程机制相比其他的语言从稳定性,API的丰富度上绝对是数一数二的了。TIJ从Java语言的视角向我们展示了如何高效、正确地使用java api,但同时又不失普遍性,其中介绍的变量的原子性...

weixin_33719619的博客 289

字节跳动高频111道核心前端面试题解析,web开发增强

但是本人觉得看书也很必要,可以节省很多时间,常见的javascript的书,例如:javascript的高级程序设计,是每位前端工程师必不可少的一本书,边看边用,了解js的一些基本知识,基本上很全面了,如果有时间可以读一些,js性能相关的书籍,以及设计者模式,在实践中都会用的到。内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。自定义指令(v-check、v-focus)的方法有哪些?v-model是什么?

2401_84094620的博客 1200

Java 并发和线程处理

大家好,我是默语,擅长全栈开发、运维和人工智能技术。在本篇博客中,我们将深入探讨 Java 并发和线程处理的最佳实践,特别是在多线程编程中如何确保线程安全性和避免死锁。理解并发编程的原理及应用场景,对于开发高效稳定的 Java 应用程序至关重要。通过这篇文章,您将全面掌握 Java 并发处理的核心技术,并学会如何在实际项目中有效应用这些技术。并发是指多个任务在同一时间段内执行,线程是操作系统能够独立执行调度的最小单位。在 Java 中,通过多线程编程可以实现并发任务的处理,提高程序的执行效率。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 5万+

Android 13/14/15 默认授权应用权限的实现方法

Android版本修改方式实现原理13/14修改Permission.java将所有权限标记为Normal权限15修改DeviceIdleController.java + DefaultPermissionGrantPolicy.java监听应用安装并主动授权。

m0_60898338的博客 2916

从POI兴趣点获取到ArcGIS中热力图制作

1. POI获取及坐标点转换 POI获取我们要借助下面这个网站↓↓↓ 规划云http://guihuayun.com/poi/ 搜索POI兴趣点并复制兴趣点, 图 新建txt文本文档,粘贴兴趣点 图片 查看后得知,lng为横坐标,lat为纵坐标 文件,另存为csv格式文件,编码为utf—8 打开QGIS,因为我们pol点是从百度地图上获取的,为BD09坐标系,与WGS84有一定偏移【GCJ02:火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。 BD09:为.

qq_43173805的博客 5599

蹊源的Java笔记—线程并发与线程安全

溪源的Java笔记之线程并发与线程安全 前言 上期博客我们对线程与线程池相关知识进行了总结,实际上我们在使用线程的过程中有不得不提的问题就是线程并发与线程安全,我们在为了提升系统性能的时候,采用多线程的方式,就有可能会造成数据不安全,本篇文章溪源将带领大家了解一下线程并发与线程安全相关的知识。 线程与线程池可参考我的博客:溪源的Java笔记之线程与线程池 正文 线程并发 线程并发,指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行

蹊源的奇思妙想的博客 2471

即梦(Dreamina)技术浅析(六):多模态生成模型

多模态生成模型的目标是结合不同模态的数据(如文本和图像),生成新的视觉内容。其核心思想是利用文本描述引导图像或视频的生成过程,使得生成结果能够准确反映用户的意图。

m0_75253143的博客 1337

黑马Java面试笔记之 并发编程篇(线程基础)

并行和并发有什么区别候选人:现在都是多核CPU,在多核CPU下并发是同一时间应对多件事情的能力,多个线程轮流使用一个或多个CPU并行是同一时间动手做多件事情的能力,4核CPU同时执行4个线程1. 创建线程的方式有哪些?在java中一共有四种常见的创建方式,分别是:继承Thread类、实现runnable接口、实现Callable接口、线程池创建线程。通常情况下,我们项目中都会采用线程池的方式创建线程。2.runnable和callable有什么区别?Runnable 接口run方法没有返回值;

2201_75550069的博客 1073

LeRobot 入门教程(四)SO-101机械臂组装教程

《SO-101机器人组装与配置指南》详细介绍了旗舰机器人SO-101的完整搭建流程。从获取3D打印零件、安装LeRobot软件和FeetechSDK,到分步组装6个关节的机械臂结构(含夹爪/手柄选项),指南提供了清晰的螺丝规格和安装位置说明。重点包括:电机ID/波特率设置方法、USB端口识别技巧、领导者/跟随者臂的校准流程,以及故障排查建议。完成组装后,用户可通过配套Python脚本校准机器人,为后续的自主学习任务做好准备。文档附有视频演示和技术支持通道,确保用户顺利完成机器人部署。

2506_90492529的博客 2582

【AI Agent】Harness Engineering实践

Harness(运行宿主)是围绕 LLM构建的一套确定性工程系统,其核心职责是:承认模型的固有局限,用可控的工程手段逐一弥补,使"强大但不可靠的推理引擎"变成"可信赖的生产级Agent"模型 是发动机——提供原始动力Agent 是驾驶员——做出决策Harness 是道路、地图、护栏、仪表盘、维修站和质检线——确保行驶安全有序没有Harness,模型越强,可能只是更快地制造混乱。

sysu_lluozh 196

Java并发与线程

Java并行与并发 转自己的学习笔记:2016-09-26 代码没有流程控制前提下,代码是从上而下逐行执行的。 若要打游戏和放音乐同时运行(多任务同时运行),要使用多进程或多线程来解决。 并行和并发: 并行:指两个或多个事件在同一时刻点发生;(微观) 并发:至两个或多个事件在同一个时间段内发生;(宏观) 在操作系统中,再多到程序环境下,并发性是指在一段时间内宏观上有多个程序在...

不畏夕阳的博客 3979

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JAVA并发编程——Java线程

本文是Java多线程编程的基础篇,系统讲解了进程与线程的核心概念及实际应用。主要内容包括:进程与线程的区别与联系、并行与并发的本质区别、多线程在异步调用和效率提升中的应用场景。详细介绍了三种创建线程的方法(Thread、Runnable、FutureTask),并对比了它们的优缺点。文章还提供了查看进程线程的实用命令,解析了线程运行的底层原理(栈帧、上下文切换)。最后对常用线程方法(run/start/sleep/yield等)进行了深入讲解,帮助读者掌握多线程编程的基础知识。(14

weixin_52344200的博客 821

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

《JAVA编程思想》学习笔记:第21章(并发)

目录Java编程思想(一)第1~4章:概述Java编程思想(二)第5章:初始化和清理Java编程思想(三)第6章:访问权限Java编程思想(四)第7章:复用类Java编程思想(五)第8章:多态Java编程思想(六)第9章:接口Java编程思想(七)第10章:内部类Java编程思想(八)第11章:持有对象Java编程思想(九)第12章:异常Java编程思想(十)第13章:字符串Java编程思想(十一...

caobaokang的专栏 1571

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Java编程思想读书笔记(八)第21章-并发

线程可以驱动任务,因此你需要一种描述任务的方式,这可以由Runnable接口来提供。要想定义任务,只需实现Runnable接口并编写run()方法,使得该任务可以执行你的命令。当从Runnable导出一个类时,它必须具有run()方法,但是这个方法并无特殊之处——它不会产生任何内在的线程能力。要实现线程行为,你必须显式地将一个任务附着到线程上。线程的一个额外好处是它们提供了轻量级的执行上下文切换(大约100条指令),而不是重量级的进程上下文切换(要上千条指令)。

leonliu06的博客 2889

java并发-《java编程思想第4版》-知识点简单笔记

Java并发编程 1)并发使用场景 “速度” 和 “设计可管理醒” 2)单处理器需要并发提高性能主要是因为线程阻塞 3)单处理器系统新能提高的常见事例—事件驱动的编程。 4)实现并发最直接方式是在操作系统级别使用进程,因为资源独立互不干扰 5)编写多线程程序由于共享内存和io资源,导致最困难的在协调不同线程驱动的任务之间对这些资源的使用 6)协作多线程,每个任务都会自动地放弃控制,这要求程序员要有意识地在每个任务中插入让步语句。 7)协作多线程的优势,上下文切换比抢占式开销小,对同时执行的线程的数量没有限制

U12Euphoria的博客 3457

Java多线程与线程并发库高级应用笔记

以下内容是学习张老师Java多线程与线程并发库高级应用时所做的笔记,很有用 网络编辑器直接复制Word文档排版有点乱,提供原始文件下载 先看源文件概貌     张孝祥_Java多线程与并发库高级应用 【视频介绍:】     Java线程是一项非常基本和重要的技术,在偏底层和偏技术的J

优快云博客 1504

JAVA编程思想笔记 : 并发 [ 一 ]

程序中的所有事物,在任意时刻都只能执行一个步骤. 并发的多面性 并发解决的问题大体上可以分为"速度"和"设计可管理性"两种 并发通常是提高运行在单处理器上的程序的性能. 实现并发最直接的方式是在操作系统级别使用进程. 困难: 协调不同线程驱动的任务之间的对内存/IO 资源的使用. 以使得这些资源不会同时被多个任务访问. 改进代码设计 Java 的线程机制是...

张伯毅的专栏 855

Java并发01:进程、线程、并发、并行、多线程、线程安全、死锁、并发优缺点

[超级链接:Java并发学习系列-绪论] 本章主要对Java并发(Concurrent)相关的概念进行说明。 1.进程(Process)与线程(Thread) 进程是系统资源分配的最小单元。线程是CPU调度的最小单元。 一个 进程至少包含一个线程,可以包含多个线程。这些线程共享这个进程的资源。 每个线程都拥有独立的运行栈和程序计数器,线程切换开销小。 多进程指的是操作系统同时运行多个程...

韩超的博客 (hanchao5272) 3347

Java 线程与并发

--- 包含了所有与 Java 线程与并发相关的文章索引

Regino的博客 1814

Java多线程、Java并发笔记

多并发笔记

qq_43325216的博客 546
上一篇: 线程同步工具之CountDownLatch示例
下一篇: java编程思想笔记-并发之线程加入
光与热
博客等级 码龄11年 55粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值