java edt,java并发之EDT测试

article/2025/10/12 12:39:04

测试代码如下:

1、耗时计算没有单独起线程处理,耗时计算在EDT线程执行,导致界面没有响应,处于卡死状态

package thread;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.SwingUtilities;

public class Test {

public static void main(String[] args) {

JFrame frame=new JFrame();

final JButton button=new JButton();

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

button.setLabel("busy");

button.setEnabled(false);

//ExecutorService executorService=Executors.newCachedThreadPool();

//executorService.execute(new Runnable() {

//

//public void run() {

// TODO Auto-generated method stub

for (int i = 0; i < 10000000; i++) {

System.out.println("operation is running");

}

//button.setLabel("");

//}

//});

}

});

button.setSize(50, 20);

frame.add(button);

frame.setVisible(true);

frame.pack();

}

}

2、

0818b9ca8b590ca3270a3433284dd417.png

2、起线程处理耗时操作,耗时操作单独在一个线程处理,界面及时响应,没有问题

0818b9ca8b590ca3270a3433284dd417.png

3、窗体设置部分代码在主线程处理

0818b9ca8b590ca3270a3433284dd417.png

4、建议代码如下,对界面的操作应该放在edt线程里去处理,即使是组件的初始化也最好放在EDT中处理,虽然从主线成直接初始化组件发生的错误概率很小,但还是要避免。

上述的SwingUtilites.invokeLater也可有EventQueue.invokeLater代替,这两个方法都是正确的,选择任何一个都可以。实际上,SwingUtilities版只是一个薄薄的封装方法,它直接调用 EventQueue.invokeLater。因为Swing框架本身经常调用SwingUtilities,使用SwingUtilities可以减 少程序引入的类。

第一条规则同通常称为单一线程规则,在任何非EDT线程中都不该接触swing组件。这两条规则看似是矛盾的,既然将耗时的操作放入其他其他线程,那么当耗时操作完成时如何将结果更新到swing组件当中去?因为不能在其他线程中接触swing组件的。其实想想也不难,既然EDT本质上是从事件队列中拿出事件来处理的,那么只要能在其他线程中把耗时操作完成以后再把更细ui组件的代码封装放到事件队列中就行了,到时EDT自然会从事件队列取出代码执行用以达到更新的目的,这样两条规则都满足了。其实在任何线程中,可以使用两种方法想事件队列添加任意的动作。即调用SwingUtilites类(或者EventQueue类也是一样)invokeLater或者invokeAndWait两个静态方法向事件队列添加任务。

package thread;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.SwingUtilities;

public class Test {

public static void main(String[] args) {

JFrame frame=new JFrame();

final JButton button=new JButton();

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

button.setLabel("busy");

button.setEnabled(false);

ExecutorService executorService=Executors.newCachedThreadPool();

executorService.execute(new Runnable() {

public void run() {

// TODO Auto-generated method stub

for (int i = 0; i < 10000000; i++) {

System.out.println("operation is running");

}

//对gui组建的操作放在edt线程处理

SwingUtilities.invokeLater(new Runnable() {

public void run() {

// TODO Auto-generated method stub

button.setLabel("");

}

});

}

});

}

});

//界面的初始化其实也不应该放在主线程执行,应该放在edt线程,虽然出错的概率不大

button.setSize(50, 20);

frame.add(button);

frame.setVisible(true);

frame.pack();

}

}


http://chatgpt.dhexx.cn/article/7VQVyFLC.shtml

相关文章

linux服务端修改EDT为东八区,EDT开发环境配置

1 安装条件 512MB内存或更高 Win XP/Win Vista/Win 7/RedHat Linux 32位或者64位操作系统(推荐32位) 安装IE7/8/9、FireFoxLatest Version、Chrome等浏览器中的一种 OracleJRE 1.6或更高版本 2 安装步骤 EDT 0.8.0已经发布发布。用户现在可以在http://www.eclipse.org/edt/#d…

修改linux系统的时间EDT为CST

问题&#xff1a; Centos 系统时间下午时间显示为12小时制 分析&#xff1a; 开始以为是要设置为24小时制 后来执行date命令发现是EDT&#xff0c;EDT 是北美东部夏令时间&#xff0c;比UTC落后4个小时 解决&#xff1a; # mv /etc/localtime /etc/localtime.bak # ln -s …

EDT技术 ug - 第四章节Creation of the EDT Logic (持续更新)

文章目录 Compression Analysisanalyze_compression Preparetion For EDT Logic CreationParameter Specification for the EDT LogicDual Compresson ConfigurationDefine Dual Compression ConfigurationsASYmmetric Input and Output ChannelsBypass Scan ChainsLatch-Based…

java edt,Java Swing 学问篇 - EDT

Java Swing 常识篇之EDT 从毕业到现在用SWING已经一年多&#xff0c;在这里想总结一下过去学到的东西和经验&#xff0c;和各位兄弟姐妹们一起分享。在以后的文章中也会和大家一起来分享一些好的框架。说起JAVA SWING&#xff0c;普遍给人的感觉是“丑、慢、难”&#xff0c;丑…

edt嵌入式确定性测试_CallSerially EDT和InvokeAndBlock(第1部分)

edt嵌入式确定性测试 我们上一次在2008年解释了EDT背后的一些概念&#xff0c;因此&#xff0c;我们很高兴再次撰写有关EDT的文章&#xff0c;在开发人员指南以及有关Udemy的课程中都有关于EDT的部分&#xff0c;但是由于这是最重要的了解在Codename One中&#xff0c;它几乎没…

EDT部署功能介绍

EDT部署功能介绍 当你在开发EDT Web前段程序的时候&#xff0c;你需要接触到EDT部署操作&#xff0c;从而将生成好的RUIHandler和Service的目标代码部署复制到目标Web程序中。和大家所熟知的部署到应用程序服务器上不同&#xff0c;EDT的部署操作是将生成好的Java/JavaScript/…

EDT技术 ug - 第一章节 Getting Start

文章目录 引言TestKompress Compression LogicEDT FlowEDT IP generationEDT synEDT IP pattern gennerationATPG 熟悉工具batch mode执行系统命令 本系列介绍的是Tessent的EDT&#xff08; Embedded Deterministic Testing&#xff09;技术。 参考为EDT tessent的 TestCompre…

DIY01_NE555叮咚门铃

文章目录 项目简介电路原理一、555定时器电路结构及工作原理二、叮咚门铃电路工作原理 原理图与PCB图一、原理图二、PCB图1. 初版2. 改进版 实物图立创打板流程经验总结 项目简介 第一次尝试自己DIY一个小电路设计&#xff0c;笔者选择了相对简单的NE555叮咚门铃。在本篇博客中…

NE555波形发生器手把手教程之NE555内部结构(一)

通过ne555搭建的波形发生器 可实现方波、三角波、正弦波输出 工程链接&#xff1a;https://pan.baidu.com/s/1T-9bdnO1IrWUsjmRTl12zQ 提取码&#xff1a;py66 一、芯片介绍 参数 供应电压&#xff1a;4.5-18V 供应电流&#xff1a;10-15mA 输出电流&#xff1a;225mA (m…

NE555基本原理及相关公式的推导

NE555基本原理及相关公式的推导 基本原理公式推导 基本原理 NE555主要由分压电路&#xff0c;电压比较器&#xff0c;RS触发器三部分组成&#xff1b; 分压电路电压比较器RS触发器提供电压比较器比较电压根据触发信号输出高低电平用于输出矩形波 当 V A > 2 3 V c c V_A&g…

模电学习12. NE555 方波信号发生器

模电学习12. NE555 方波信号发生器 一、NE555 基本功能1. 基本作用2. 基本组成 二、NE555方波生成电路1. 基本原理2. 原理图3. 仿真&#xff08;1&#xff09;RP1 设置为10%&#xff08;2&#xff09;RP1设置为90% 4. 实际电路 一、NE555 基本功能 1. 基本作用 NE555是一款广…

mysql profile 工具Neor Profile

一、下载Download - Neor Profile SQL http://www.profilesql.com/files/download/sqlprofiler-4.1.1.exe Neor Profile 这款免费的mysql 分析工具&#xff0c;这个工具类似于一个代理 本地启动一个mysql 代理服务&#xff0c;类似于MyCat 二、安装完成配置 三、代码连接代…

蓝桥杯NE555定时器与频率测量

使用的是蓝桥杯单片机CT107D实训平台&#xff1a; 555定时器内部&#xff0c;有3个5K的电阻分压。 NE555是一个纯硬件的设计&#xff0c;一旦电路确定了&#xff0c;其功能也就定了。 在蓝桥杯的板子上&#xff0c;555定时器是一个信号发生电路&#xff0c;通过定位器Rb3可改…

NE555的使用与理解

NE555 一款模拟与数字信号的集成芯片&#xff0c;通过一个电容充放电来输出方波&#xff0c;电容充放电的快慢决定了NE555输出的方波的频率&#xff0c;再通过控制两个电阻的比值来改变其输出方波的占空比。 外观图 内部图 因为NE555中有三个电阻R且都为5K所以称为555&#x…

蓝桥杯单片机设计与开发⑬ ---NE555模块

一、555定时器&频率测量 1. 电路原理 NE555是一种时钟芯片&#xff0c;输出一定频率的脉冲信号。就其模块特性&#xff0c;简单点来说&#xff0c;该模块会根据Rb3电位器的阻值&#xff0c;在SIG脚输出相应的频率的脉冲信号。 第十届竞赛中对该模块设置了考点&#xff0c;…

NE555 Motor LED Chaser

文章目录 1.前言2.资料下载 1.前言 这个是从YouTube上搬运来的&#xff0c;如图所示 2.资料下载 所需材料 #1# 10k resistor 1 #2# 10k variable resistor 1 #3# 10uf capacitor 1 #4# 3mm blue led 4 #5# 3mm yellow led 4 #6# 3mm red led 4 #7# 3mm green led 4 #8# 3mm…

单片机蓝桥杯——NE555频率测量

原理: 对蓝桥杯单片机板子上NE555电路进行频率测量时&#xff0c;不需要任何的配置&#xff0c;整个单片机测量频率的过程中&#xff0c;跟NE555芯片没什么关系&#xff0c;归根结底考察的还是定时/计数器。但需要注意&#xff1a; &#xff08;1&#xff09;当用到NE555时&am…

蓝桥杯单片机-NE555模块

一、简介 1、NE555在开发板中用于输出频率可变&#xff0c;占空比不变的方波。 2、NE555是纯硬件的设计&#xff0c;通过电位器RB3可改变其信号输出频率。不需要编程实现其功能。 考点&#xff1a;使用定时器的计数模式测量NE555输出的频率 3、开发板上电路 NET SIG即接P34&…

NE555产生方波

NE555详解 上图是芯片的引脚图 上图是芯片的内部结构图&#xff0c;脚号与第一张图的引脚相对应 从结构图可以得出下表&#xff1a; 接下来看应用图; 这是从CSDN上得到的一个方波发生器的原理图&#xff0c;对齐进行分析&#xff1a; 原理图将6和2脚连在一起&#xff0c; 所…

如何使用NE555产生方波

NE555在很多电路设计中都会用到&#xff0c;常用来实现施密特触发器&#xff0c;单稳态触发器和多谐振荡器 常用的NE555是这种八脚的&#xff0c;大家可以看下引脚定义 首先我们来看下NE555的内部构造&#xff1a; C1和C2是两个运放比较器&#xff0c;内部的这三个电阻阻值都是…