JavaSE-多线程(11)- LockSupport

一条龙开发指南:MCP AI Agent 理论+项目实战开发你的MCP Server MCP(Model Connection Protocol)是Anthropic于2024年推出的AI模型连接协议,旨在为AI模型提供开放、通用的标准化接口,类似于“USB-C”接口,使AI模型能够无缝连接各种数据源和工具。MCP通过标准化协议解决了AI系统集成中的碎片化问题,提升了开发效率和系统可靠性。开发者可以通过简单的配置,快速接入不同的MCP Server,实现AI模型的多样化应用。MCP支持多种协议,如Stdio、SSE等,并通过JSON-RPC格式进行数据传输。文章还以腾讯云代码助手为例,展示了 阅读详情

JavaSE-多线程(11)- LockSupport

使用LockSupport 类可使线程暂停,请看下例:

例1

线程 t1 执行 LockSupportTest 类run方法,在run方法中,每隔1秒输出一次 i 的值,一共输出10次,在i等于5时暂停线程,主线程睡眠8秒后,调用 activate 方法(实际调用 LockSupportTest 对象即锁的notify方法),t1线程继续执行

package com.hs.example.base.multithread.day01;


public class LockSupportTest {

    public synchronized void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (i == 5) {
                try {
                    this.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //激活线程 
    public synchronized void activate() {
        this.notify();
    }

    public static void main(String[] args) {
        LockSupportTest lockSupportTest = new LockSupportTest();
        Thread t1 = new Thread(() -> {
            lockSupportTest.run();
        });
        t1.start();

        try {
            Thread.sleep(8000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("主线程睡眠结束。。。");
        // 注意,此处不能写成:lockSupportTest.notify(),否则会抛 IllegalMonitorStateException 异常
        // 因为调用object.notify方法的前提是需要获取对象锁
        // 此时 t1 线程已经释放了锁,所以调用 lockSupportTest.activate() 方法后主线程可以获取 lockSupportTest 锁
        // activate 方法内调用 this.notify(); 不会有问题,因为此时调用线程已经获取锁
        lockSupportTest.activate();
    }
}
0
1
2
3
4
5
主线程睡眠结束。。。
6
7
8
9

如何使用 LockSupport 类实现例1效果?请看例2:

例2

例2执行结果与例1一样,

public class LockSupportTest2 {

    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (i == 5) {
                //暂停当前线程
                LockSupport.park();
            }
        }
    }

    public static void main(String[] args) {
        LockSupportTest2 lockSupportTest = new LockSupportTest2();
        Thread t1 = new Thread(() -> {
            lockSupportTest.run();
        });
        t1.start();

        try {
            Thread.sleep(8000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("主线程睡眠结束。。。");
        //恢复t1线程执行
        LockSupport.unpark(t1);
    }
}
影楼精修-AI追色算法解析 本文解析了像素蛋糕软件中AI追色功能的技术原理与实现方案,为理解AI追色技术提供了实用参考。 阅读详情

相关推荐

SD-WAN组网案例——数据中心

SD-WAN组网案例——数据中心

2301_78457663的博客 706

C#--线程暂停

Thread.Sleep(int millisecondsTimeout):暂停当前线程的执行指定的毫秒数。Thread.Sleep(TimeSpan timeout):暂停当前线程的执行指定的时间段。

qq_55113618的博客 1111

Ubuntu双系统引导修复实战:boot-repair工具详解

本文详细介绍了使用boot-repair工具修复Ubuntu双系统引导丢失问题的实战方法。当GRUB引导菜单因安装新系统或更新而损坏时,通过制作Ubuntu启动盘进入Live环境,安装并运行boot-repair,可一键完成系统修复引导,自动化执行GRUB重装与配置,解决无法进入Windows或Ubuntu的常见故障。

weixin_29224589的博客 359

LockSupport与线程中断

LockSupport与线程中断

Json_book的博客 309

告别Keil!用VSCode+PlatformIO玩转STC单片机(附自动下载配置)

本文详细介绍了如何从Keil迁移到VSCode+PlatformIO进行STC单片机开发,包括环境搭建、自动下载配置等实用技巧。通过对比传统IDE与现代工具链的差异,展示了VSCode+PlatformIO在代码编辑体验、跨平台支持和开发效率上的优势,帮助开发者实现更流畅的STC单片机开发流程。

weixin_27252001的博客 459

51雾化器实现

1. 雾化器简介 雾化器是将试液雾化的一种器械。雾化器是原子化系统的重要部件,其性能对测定的精密度和化学干扰等产生显著影响。因此要求雾化器喷雾稳定、雾滴细小、均匀和雾化效率高。雾化器的类型有超声雾化器,空气压缩式雾化器,网式雾化器。超声雾化器因其价格合适,适合家用,被广泛应用于加湿器,香薰机等各种小家电,也在医疗领域有很多的应用。家用雾化器的主要器件是一枚雾化片。 家用雾化器分为两种不同类别雾化片,实孔雾化片和微孔雾化片,这两种的喷雾方法和工作原理是有所不同的。不同的雾化片需要特定的频率才能工作。 实孔雾

qq_42415953的博客 2万+

java并发-LockSupport

LockSupport定义了一组以park开头的方法用来阻塞当前线程,以及unpark(Thread thread)方法来唤醒一个被阻塞的线程。Park有停车的意思,假设线程为车辆,那么park方法代表着停车,而unpark方法则是指车辆启动离开。 LockSupport: 一、为什么对park()、parkNanos(long nanos)和parkUntil(long dea...

江城宴的博客 2636

从梯度泄露到数据复原:DLG与iDLG算法实战解析

本文深入解析了DLG与iDLG算法在梯度泄露与数据复原中的实战应用,揭示了联邦学习中的隐私风险。通过详细代码示例和实验数据,展示了如何从梯度中复原原始训练数据,并探讨了梯度压缩、差分隐私等防御措施。文章特别强调了iDLG算法在标签破解中的高效性,为AI安全领域提供了重要参考。

weixin_30552811的博客 192

java停止一秒

在 Java 中可以使用 Thread.sleep 方法来停止线程(也就是当前程序)一段时间。例如,要停止一秒,可以这样写: try { Thread.sleep(1000); // 停止一秒,单位是毫秒 } catch (InterruptedException e) { e.printStackTrace(); } 注意,Thread.sleep 方法是一个静态方法,它接受一...

weixin_42612405的博客 2253

Win10离线安装.net framework 3.5全攻略:镜像匹配与DISM命令实战(附错误0x8024402c解决方案)

本文详细解析了在Windows 10系统中离线安装.NET Framework 3.5的完整流程与核心难点。重点阐述了如何精准匹配系统版本与安装镜像,并提供了使用DISM命令进行离线安装的实战步骤。针对常见的错误代码0x8024402c,文章深入剖析了其根源,并给出了系统级的排查与解决方案,特别适合企业内网运维人员参考。

weixin_29299807的博客 661

7.26华为OD机试真题 新系统 - 炸弹人的雷区数量 (Java/Py/C/C++/Js/Go)

7.26华为OD机试真题 新系统 - 炸弹人的雷区数量 (Java/Py/C/C++/Js/Go)

算法大师! 793

线程(小结)

线程安全的几个类 函数: isAlive():判断当前线程是否存活。 Thread.sleep是将主线程停止1秒,而不是将mythread线程停止1秒 线程安全(Thread-safe)的集合对象: Vector 线程安全: HashTable 线程安全: StringBuffer 线程安全 实现多线程的方法:继承Thread类,实现Runnable 接口。 start 方法异步执行,让系统安排一个时间来调用Thread.run方法 run方法同步执行,由main的主线程调用run方法。(因此RU.

m18846420582的博客 290

YOLO骨干网络改进-第1篇:深度解析YOLOv8的C2f模块原理与实现

首先,需要将自定义的C2f模块注册到Ultralytics的模块字典中。# 注册自定义模块"""自定义的C2f模块。"""# 自定义YOLOv8s配置文件:yolov8s_custom.yamlscales:# Backbonebackbone:# Headhead:# 加载自定义模型# 训练模型imgsz=640,batch=16,device=0,workers=8,设计理念:C2f模块是C3模块的演进,通过增加梯度分支来丰富梯度流,提升特征表示能力。结构原理。

2201_76125393的博客 110

后端八股整理

后端八股整理

蔡林浩的博客 498

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java多线程执行SQL语句

可以使用Java中的多线程技术来执行SQL语句。 可以使用Java中的JDBC API来执行SQL语句,并且通过创建多个线程并行执行SQL语句来提高执行效率。 不过,请注意在多线程环境中使用JDBC时需要特别注意线程安全性问题。因为JDBC API并不是线程安全的,因此需要通过特殊的方式来解决这个问题。 推荐使用数据库连接池,在每个线程中使用单独的数据库连接来执行SQL语句。这样可以保证线程安全并...

weixin_42603332的博客 1304

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java 多线程执行 sql 语句(用ExecutorService实现)

可应用场景: 数据量较大, 而单次执行sql时间长 数据量过大的情况, 单线程执行需要很长一段时间,我们需要开启多线程执行, 注意mysql支持的连接数, 不要超过这个连接数 创建 服务, Executors.newFixedThreadPool(70); 里面的数字根据自己的需求和mysql的能力来决定 比如我这边开70个 这里我用的读取文件流之后开启线程, 具体场景根据需求自己定 public void test() throws Exception{ List<List&lt.

dalter的博客 3771

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java线程的三种停止方法

一、阻塞中断和非阻塞中断 interrupt()方法是给受阻塞的线程发出一个中断信号,这样受阻线程就得以退出阻塞的状态,只是改变中断状态而已,它不会中断一个正在运行的线程。 简单来说,一个线程在运行状态中,其中断标志被设置为true之后,一旦线程调用了wait、join、sleep方法中的一种,立马抛出一个InterruptedException,且中断标志被程序会自动清除,重新设置为false。...

迁就100 8355

Java使用多线程加快sql查询

摘要:本文介绍了两种Java多线程并行查询的实现方式。方式一使用CompletableFuture,通过supplyAsync方法异步执行任务,最后汇总并排序结果;方式二采用CountDownLatch机制,配合线程安全的CopyOnWriteArrayList收集结果。两种方式均推荐使用自定义的有界队列线程池替代FixedThreadPool,设置合理的拒绝策略(CallerRunsPolicy)和线程池参数,同时注意线程安全问题(独立DTO副本)和异常处理。最后都对结果进行了排序处理。

风流倜傥唐伯虎的博客 1422

Java利用多线程执行SQL减少执行时间提高效率

Java利用多线程执行SQL减少执行时间提高效率 首先这是个人在实际的项目中使用的代码,部分敏感代码没有上,不过不影响对代码的理解: 1.实现自己的线程 /** * * @author * @date */ package com.mis.pm.thread; import java.util.List; import java.util.Map; import com.mis.core.service.BaseServic

foreversilent的专栏 7932

Java在一个方法内用线程池启动多个线程执行不同sql

教你如何在Java中使用线程池启动多个线程执行不同的SQL操作 简介 作为一名经验丰富的开发者,我将教你如何在Java中使用线程池启动多个线程执行不同的SQL操作。这将帮助你提高系统的并发处理能力,提升程序的性能。 流程图 #render_12_2450570387-svg{font-family:"trebuchet m...

weixin_41075154的博客 316

java如何实现让程序暂停1s再继续执行?

java如何实现让程序暂停1s再继续执行? www1314520sss | 浏览 16157 次  问题未开放回答 |举报 推荐于2017-09-10 16:16:36 最佳答案 被采纳的那位有个小错误 1 2 3 4 5 6 7 8 9 10 11 12

evilcry2012的专栏 6万+

线程池的回忆

这周项目中出现了一个问题。具体描述为: 这个项目会出一个FreeMark报告,报告执行是多个sql组合查询的,这样会导致查询结果非常慢,报告中涉及到的表有80多张,所以请求接口去执行80多个sql效率是非常慢的,记录一下解决办法。将sql分组,以多线程的方式并发执行sql。 先来回忆一下创建线程的几种方式。 1、继承Thread类创建线程 2、实现Runnable接口创建线程 3、使用Callable和Future创建线程 然后,通过查阅资料,首先回忆一下线程池。 /** * * @param

做一条咸鱼 255

写一个打印时间的多线程,睡眠时间停顿为1秒

import java.text.SimpleDateFormat; import java.util.Date; public class Clock { public static void main(String[] args) { Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("...

健健 1252

多线程——线程的停止 线程的延迟

线程的停止最好是用标志位的转换来停止线程 例: package Lesson_Thread; public class Thread_Stop implements Runnable { //设置标志位 true private boolean flag = true; @Override public void run() { int i = 0; while(flag){ System.out.println("

weixin_44899230的博客 438
上一篇: JavaSE-多线程(9)- Semaphore
下一篇: JavaSE-多线程(12)- wait notify
sql2008help
博客等级 码龄11年 80粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值