java自定义线程阻塞

SAR型ADC的电荷重分配技术解析 本文深入解析了SAR型ADC的核心技术——电荷重分配。通过类比“猜数字”游戏,阐述了其逐次逼近的工作原理,并重点剖析了电容阵列如何实现高速、低功耗的模数转换。文章还探讨了该技术在速度、能效及集成度方面的优势,并指出了电容匹配精度等实际挑战,为嵌入式与物联网设备中的ADC选型与应用提供了实用指南。 阅读详情

线程问题如果想交流的话可以加我qq 1135409377。

LockSupport api 说明

说明:LockSupport 底层是通过,sun.misc.Unsafe实现的。

1:public static Object getBlocker(Thread t)

返回提供给最近一次尚未解除阻塞的 park 方法调用的 blocker 对象,如果该调用不受阻塞,则返回 null。返回的值只是一个瞬间快照,即由于未解除阻塞或者在不同的 blocker 对象上受阻而具有的线程。

2:public static void park()

为了线程调度,禁用当前线程,除非许可可用。
如果许可可用,则使用该许可,并且该调用立即返回;否则,为线程调度禁用当前线程,并在发生以下三种情况之一以前,使其处于休眠状态:
- 其他某个线程将当前线程作为目标调用 unpark;
- 或者其他某个线程中断当前线程;
- 或者该调用不合逻辑地(即毫无理由地)返回。

此方法并不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定线程返回时的中断状态。

3:public static void park(Object blocker)
为了线程调度,在许可可用之前禁用当前线程。如果许可可用,则使用该许可,并且该调用立即返回;否则,为线程调度禁用当前线程,并在发生以下三种情况之一前,使其处于休眠状态:

  • 其他某个线程调用将当前线程作为目标调用 unpark;
  • 或者 其他某个线程中断当前线程;
  • 或者 该调用不合逻辑地(即毫无理由地)返回。

此方法不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定返回时该线程的中断状态。

参数:
blocker - 导致此线程暂停的同步对象

4:public static void parkNanos(long nanos)

为了线程调度禁用当前线程,最多等待指定的等待时间,除非许可可用。如果许可可用,则使用该许可,并且该调用立即返回;否则,为线程调度禁用当前线程,并在发生以下四种情况之一以前,将其处于休眠状态:

  • 其他某个线程将当前线程作为目标调用 unpark;
  • 或者其他某个线程中断当前线程;
  • 或者已超过指定的等待时间;
  • 或者该调用不合逻辑地(即无缘无故地)返回。

此方法并不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定线程返回时的中断状态或所用的时间。

参数:
nanos - 要等待的最大纳秒数

5:public static void parkNanos(Object blocker,long nanos)
为了线程调度,在许可可用前禁用当前线程,并最多等待指定的等待时间。如果许可可用,则使用该许可,并且该调用立即返回;否则,为线程调度禁用当前线程,并在发生以下四种情况之一前,使其处于休眠状态:

  • 其他某个线程将当前线程作为目标调用 unpark;
  • 或者 其他某个线程中断当前线程;
  • 或者 已超过指定的等待时间;
  • 或者 该调用不合逻辑地(即毫无理由地)返回。

此方法不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定返回时该线程的中断状态或已过的时间。

参数:
blocker - 导致此线程暂停的同步对象
nanos - 要等待的最大纳秒数

6:public static void parkUntil(long deadline)
为了线程调度,在指定的时限前禁用当前线程,除非许可可用。
如果许可可用,则使用该许可,并且调用立即返回;否则,为线程调度禁用当前线程,并在发生以下四种情况之一以前,将其处于休眠状态:

  • 其他某个线程将当前线程作为目标调用unpark;
  • 或者其他某个线程中断当前线程;
  • 或者指定的最后期限已过;
  • 或者该调用不合逻辑地(即毫无理由地)返回。

此方法并不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定线程返回时的中断状态或当前时间。

参数:
deadline - 要等待的绝对时间,用相对于历元的毫秒数值表示,即 相对于格林威治时间1970年01月01日00时00分00秒 的毫秒数值表示

7:public static void parkUntil(Object blocker,long deadline)
为了线程调度,在指定的时限前禁用当前线程,除非许可可用。
如果许可可用,则使用该许可,并且该调用立即返回;否则,为线程调度禁用当前线程,并在发生以下四种情况之一前,使其处于休眠状态:

  • 其他某个线程将当前线程作为目标调用 unpark;
  • 或者其他某个线程中断当前线程;
  • 或者指定时限已过;
  • 或者该调用不合逻辑地(即毫无理由地)返回。

此方法不 报告是哪个线程导致该方法返回。调用者应该重新检查最先导致线程暂停的条件。调用者还可以确定返回时该线程的中断状态或当前时间。

参数:
blocker - 导致此线程暂停的同步对象
deadline - 要等待的绝对时间,用相对于历元 (Epoch) 的毫秒数值表示,即 相对于格林威治时间1970年01月01日00时00分00秒 的毫秒数值表示

8:public static void unpark(Thread thread)
如果给定线程的许可尚不可用,则使其可用。如果线程在 park 上受阻塞,则它将解除其阻塞状态。否则,保证下一次调用 park 不会受阻塞。如果给定线程尚未启动,则无法保证此操作有任何效果。

参数:
thread - 要执行 unpark 操作的线程;该参数为 null 表示此操作没有任何效果。

java自定义线程阻塞

自定义阻塞类 MyBlock
package com.lp.myblock;

import java.util.concurrent.locks.LockSupport;

public class MyBlock {
    /**
     * 阻塞线程
     * @throws InterruptedException
     */
    public static void block() throws InterruptedException {
        LockSupport.park();//建议使用,park(Object blocker),应为blocker对象在线程受阻塞时被记录,以允许监视工具和诊断工具确定线程受阻塞的原因,通过getBlocker(Thread t)方法获取blocker对象。
        boolean isInterrupted = Thread.currentThread().isInterrupted();//也可以替换为 Thread.interrupted(), 
//      方法 isInterrupted() 与  方法interrupted() 的区别
//      1:isInterrupted() 是非静态方法,interrupted() 是静态方法。
//      2:isInterrupted() 不会重置线程的中断状态,interrupted() 会重置线程的中断状态
        if(isInterrupted) {
            throw new InterruptedException(Thread.currentThread().getName() + "线程被中断");
        }
    }
    /**
     * 解除线程阻塞
     * @param t
     */
    public static void unBlock(Thread t) {
        LockSupport.unpark(t);
    }
}

测试类
package com.lp.myblock;

public class TestMain {
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + " 线程开始运行");
                try {
                    MyBlock.block();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    return;
                }
                System.out.println(Thread.currentThread().getName() + " 线程结束运行");
            }
        });
        t1.setName("t1");//设置线程 名称
        t1.start();//运行线程

        Thread.sleep(1000);
//      t1.interrupt();//手动中断线程
        MyBlock.unBlock(t1);//接触线程阻塞
    }
}
目标检测技术的发展:从R-CNN、YOLO到DETR、DINO OV-DINO的出现标志着在开放域目标检测领域的重大进步,其在处理未见过的物体类别时的能力得到了显著提升。这项技术对于需要适应未知或变化环境的应用具有重要意义,如自动驾驶、机器人视觉、安防监控等。 阅读详情

相关推荐

CXL Virtual Hierarchy (VH) Enumeration理解

在 CXL 3.0 协议中,CXL Virtual Hierarchy (VH) Enumeration 是一种针对 CXL 虚拟层级(Virtual Hierarchy) 设计的设备枚举机制,它允许软件将物理连接的 CXL 设备抽象为多个逻辑层级(虚拟层级),从而实现更灵活的资源管理和拓扑扩展。与传统的 PCIe 枚举相比,CXL VH 枚举在协议特性、拓扑抽象和资源分配机制上有显著差异。本质:VH 是一个逻辑上的设备层级结构,可能与物理连接拓扑不同。

Summer的博客 1005

用java自己实现代码阻塞的几种方式

用java自己实现代码阻塞

qq_42569136的博客 2010

3D Slicer中文教程(三)—数据加载及保存方式

1.打开数据与保存数据 (1)打开数据 ——可以将数据拖拽到3D Slicer应用窗口或者从菜单栏工具栏打开。 ——多种方式加载大量数据。 有关DICOM数据,请参阅DICOM模块文档。 对于几乎所有其他(包括场景),您可以使用添加数据对话框。 有关支持的数据格式的列表,请参阅此列表。 请注意,仅部分支持列出的某些格式。 ——对于一些更复杂的格式(特别是DWI),建议首先使用DICOM到n...

weixin_33676492的博客 5538

java 阻塞控制

1.单项阻塞 block方法直接阻塞当前代码,等待其他线程执行release方法后,阻塞代码直接释放 测试代码: /** * 阻塞释放与锁对象 */ public class BlockLock { public BlockLock() { } public void block() { synchronized (this) {//阻塞代码 try { this.wait(); .

大数据开发 685

华为昇腾Atlas 200I DK A2实战:从开箱到运行首个AI应用

本文详细介绍了华为昇腾Atlas 200I DK A2开发板从开箱到运行首个AI应用的全过程。包括硬件准备、系统烧录、开发板连接方案、AI应用运行及性能优化技巧,帮助开发者快速上手部署AI项目,提升开发效率。

weixin_27038245的博客 594

制作Ubuntu22.04启动盘

现在越来越多程序代码都需要运行在linux环境下,运行这些代码的前提是安装一个稳定的linux操作系统。本文选择Ubuntu 22.04去制作系统启动盘。本文主要对ubuntu22.04的启动盘制作过程进行了详细的说明,希望能帮助到有需要的朋友。

lyx_ok的博客 1万+

java自定义实现阻塞队列和线程池

实际使用时可以把线程池定义为final static 类型,保证jvm中只存在一个;或者使用单例模式创建线程池。不多BB,直接上代码。

heouheou的博客 506

Windows下Python多版本共存与切换的终极指南(含环境变量详解)

本文详细解析了在Windows系统下实现Python多版本共存与切换的完整方案。通过深入讲解环境变量Path的底层机制,提供了从安装策略、精细化Path管理到创建快速切换脚本的实战指南,并介绍了py启动器和虚拟环境等高级技巧,帮助开发者彻底解决版本冲突问题,提升开发效率。

v6b7n8m9q0的博客 538

非阻塞线程池

注意:定制自己的线程池ThreadPoolExecutor管理类,除非对线程池特别了解,否则尽量不要使用,线上项目出现问题后难以维护 import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.RejectedExe...

OnTheRoad的博客 1万+

51单片机8×8LED点阵屏动态显示取模汉字+ Proteus仿真

51单片机8×8LED点阵屏动态显示取模汉字+ Proteus仿真 Proteus仿真 取模软件:pctolcd2002 程序代码 #include<reg52.h> unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//行选 unsigned char code tabb[]={0x08,0x49,0x49,0x7F,0x08,0x49,0x49,0x7F};//选列"出" unsigned cha

perseverance51博客 8058

上位机 寻边器 通讯实战

寻边器通讯接口实现 本文介绍了上位机与盖泽(Gazer)和JEL品牌寻边器的通讯接口实现方案。主要内容包括: 接口定义:创建了IAlignerOperation接口,定义了获取状态、控制运动、真空吸附等核心功能。 具体实现: 盖泽寻边器(GazerAlignerCjh):通过串口通讯,实现了回零、校准、移动位置等操作 JEL寻边器(JelAligner):同样基于串口通讯,包含错误处理、状态查询等功能 工厂模式:通过AlignerFactory工厂类根据设备品牌创建对应的实现对象。 设备加载:展示了如何在系

StevenChen的博客 380

自定义阻塞队列

自己来定义一个阻塞队列!实现阻塞队列需要三个步骤:实现普通队列,解决线程安全问题,实现阻塞功能

Mwt258的博客 1253

java项目反编译工具记录,共计6个工具

java项目反编译工具记录,共计6个工具

橙-极纪元-JJYCheng 1802

java自定义线程池_JAVA自定义阻塞型线程池

package com.montnets.task;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.ThreadFactory;import java.util.concurrent.Thre...

weixin_31417633的博客 142

Statistics and Machine Learning Toolbox

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

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java阻塞线程池 策略_Java自定义带阻塞策略线程池

package com.example.concurrenttest.pool;import java.util.ArrayDeque;import java.util.Deque;import java.util.HashSet;import java.util.Optional;import java.util.Set;import java.util.concurrent.TimeUnit;...

weixin_39960710的博客 232

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java之自定义阻塞型线程池

import lombok.extern.slf4j.Slf4j; import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicInteger; /** * 自定义阻塞型线程池 当池满时会阻塞任务提交 */ @Slf4j public class BlockThreadPool { private ThreadPoolExecutor pool; private BlockThreadPool(.

qq_37318800的博客 229

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Java 并发编程】线程池机制 ( 线程池阻塞队列 | 线程池拒绝策略 | 使用 ThreadPoolExecutor 自定义线程池参数 )

一、线程池阻塞队列、 二、拒绝策略、 三、使用 ThreadPoolExecutor 自定义线程池参数、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 1901

java 阻塞线程池_JAVA自定义阻塞型线程池

package com.montnets.task;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.ThreadFactory;import java.util.concurrent.Thre...

weixin_29423089的博客 219

Java 阻塞主线程 CountDownLatch 自定义CountDownLatch

CountDownLatch .await() 阻塞线程 .countDown() 指定的count -1; 当count为0时 释放zusexiancheng public static void main(String[] args) throws InterruptedException { int threadSize = 20; final CountDownLatch downLatch = new CountDownLatch(thr...

你走过的路 风都是暖的 408

一文读懂Java线程池之自定义线程池、设置合适的线程数量、线程池阻塞队列、线程拒绝策略

在上篇我们学习了线程池各个参数的含义,线程池任务处理流程,使用线程池的好处等内容,本篇我们学习如何创建一个适合我们业务的线程池。为此,我们有必要先学习一下如何大概确定我们线程池核心线程数、怎么设置阻塞队列的类型与大小、当线程池没有能力处理任务了该如何使用拒绝策略等内容。

ningkangming的博客 2698

JAVA自定义阻塞型线程池

在编程过程中大家都接触过线程池吧,在JAVA中它的实现类是ThreadPoolExecutor,常见构造如下: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long k...

weixin_30793643的博客 170

Java parallelStream 的甜与坑:什么时候真提速、共享 ForkJoinPool 阻塞与自定义线程池

看起来是最省事的性能优化 —— 把stream()改一个词,循环就「并行」了。于是很多人不管三七二十一到处加,结果有的地方确实快了,有的地方反而更慢,最坑的是有的地方在高并发下整个接口都卡死了。parallelStream 不是免费的加速器。这篇用可运行的例子讲清楚三件事:什么场景它真能提速、它背后那个共享线程池藏着什么雷、以及为什么阻塞操作绝对不能扔进去。

weixin_42662753的博客 313

Java多线程(三):读写锁、阻塞队列和自定义线程池

本文主要内容:读写锁、阻塞队列和自定义线程池 五、读写锁 ReentrantReadWriteLock:读写锁出现就是为了更加方便的操作多条线程对资源的读写 readWriteLock.readLock():读锁 == 共享锁 readWriteLock.writeLock():写锁 == 独占锁 public class ReadWriteLockTest { public static void main(String[] args) { MyThreads myThread

Fortuneteller的博客 537

【Java多线程】7——阻塞队列&线程池

在《阿里巴巴Java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显式的创建线程,这样一方面是线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了资源的开销。同时线程池不允许使用Executors去创建,而要通过方式,这一方面是由于JDK 中 Executor 框架虽然提供了如等创建线程池的方法,但都有其局限性,不够灵活;使用有助于大家明确线程池的运行规则,创建符合自己的业务场景需要的线程池,避免资源耗尽的风险。

一棵灬大树的博客 2545

Java队列、线程池及ThreadPoolExecutor自定义线程池实现

Java队列、线程池及ThreadPoolExecutor自定义线程池实现

一恍过去 1万+

java自定义线程锁

先了解一下sychronized关键字的缺陷 1.无法控制阻塞时长 2.线程进入阻塞状态后是无法被中断的 分析:线程在进入同步块后执行代码的时间无法预计,且无法被中断,存在一定的安全隐患 解决:可以使用自定义的锁来解决这个问题 第一步:建立自定义锁的接口 import org.omg.CORBA.TIMEOUT; import java.util.List; import jav...

qq_29496169的博客 403
上一篇: 根据表结构自动生成mybatis文件
下一篇: 使用redis创建自己的分布式锁
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值