Java之线程———GUI线程

当java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中有两个重要的线程:AWT-EventQuecue 和 AWT-Windows。

AWT-EventQuecue 线程负责处理GUI事件,AWT-EventQuecue线程负责将窗体或组件绘制到桌面。JVM保证各个线程都有使用CPU资源的机会.

样列:

  1 package tes;
  2
  3 import java.awt.Color;
  4 import java.awt.FlowLayout;
  5 import java.awt.Font;
  6 import java.awt.event.ActionEvent;
  7 import java.awt.event.ActionListener;
  8
  9 import javax.swing.JFrame;
 10 import javax.swing.JLabel;
 11 import javax.swing.JTextField;
 12
 13 /*
 14  * 模拟一个打字游戏
 15  * */
 16 public class Example12_11
 17 {
 18     public static void main(String args [])
 19     {
 20         Wndow wnd= new Wndow();
 21       wnd.setTitle("打字游戏");
 22       wnd.setSleepTime(3000);
 23     }
 24 }
 25
 26 class Wndow extends JFrame implements ActionListener ,Runnable
 27 {
 28     JTextField  inputLetter;
 29     JLabel showLetter,showScore;
 30     int score;
 31     Thread giveLetter;    //生成字母
 32     Wndow()
 33     {
 34        init();
 35        setBounds(100, 100, 400, 240);
 36       //setBackground(Color.green);
 37       setVisible(true);
 38       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 39     }
 40     void init()
 41     {
 42          score=0;
 43       setLayout(new FlowLayout());
 44       giveLetter = new Thread(this);
 45       inputLetter = new JTextField(6);
 46       showLetter = new JLabel(" ",JLabel.CENTER);
 47       showLetter.setFont(new Font("Arial",Font.BOLD,22));
 48       showScore =new JLabel("分数:");
 49       add(new JLabel("显示字母:"));
 50       add(showLetter);
 51       add(new JLabel("输入字母按回车"));
 52       add(inputLetter);
 53       inputLetter.addActionListener(this);
 54       add(showScore);
 55       giveLetter.start();
 56     }
 57
 58     @Override
 59     public void run() {
 60         // TODO Auto-generated method stub
 61     //    String reg="[a-zA-Z]+";   //正则表达式
 62         int type[]={65,97};
 63         while(true)
 64        {
 65          char cc=(char)(((int)(Math.random()*100))%26+type[(int)(Math.random()*1000)%2]);
 66          //if(reg.matches(""+cc+""))
 67          {
 68            showLetter.setText(""+cc+" ");
 69             validate();   //更改容器,所以得用上
 70           try {
 71                Thread.sleep(1000);
 72           }  catch (InterruptedException e) {
 73             // TODO Auto-generated catch block
 74             //e.printStackTrace();
 75           }
 76         }
 77        }
 78     }
 79     @Override
 80     public void actionPerformed(ActionEvent e) {
 81         // TODO Auto-generated method stub
 82         String get = inputLetter.getText().trim();  /*trim()方法的作用为删除多余的空格*/
 83         String show =showLetter.getText().trim();
 84         if(get.equals(show))
 85         {
 86             score++;
 87             showScore.setText(""+score+" ");
 88             validate();
 89         }
 90         inputLetter.setText(null);
 91         giveLetter.interrupt(); //吵醒休眠的线程,以便加快出字母的速度
 92     }
 93     void  setSleepTime(long aa)
 94     {
 95         try {
 96             Thread.sleep(aa);
 97         } catch (InterruptedException e) {
 98             // TODO Auto-generated catch block
 99             e.printStackTrace();
100         }
101     }
102     }

------->

Java之线程———GUI线程

时间: 2024-10-17 09:00:16

Java之线程———GUI线程的相关文章

Java 并发编程之线程池的使用

在任务与执行策略之间的隐性耦合 Executor框架可以将任务的提交与任务的执行策略解耦开来(就是独立化).虽然Executor框架为制定和修改执行策略都提供了相当大的灵活性,但并非所有的任务都能适用所有的执行策略 比如: 依赖性任务 比如依赖于执行时序,执行结果或者其他效果,那么任务就带有隐含的依赖性.此时必须小心 地维持这些执行策略以避免产生活跃性问题(死锁等造成执行困难的问题) 使用线程封闭机制的任务 与线程池相比,单线程的Executor能够对并发性做出更强的承诺,它们能确保任务不会并发

Java中事件分发线程(EDT)与SwingUtilities.invokeLater相关总结

前言:这篇文章严格来说不算原创,算是我对这方面知识的一点小结,素材来至其他网友.当然我在我写的C段查询工具也用到了这方面的东西,不过由于代码太多不方便用作事例,因此用了他人的素材总结一下,望理解O(∩_∩)O~ 一 Swing线程基础 一个Swing程序中一般有下面三种类型的线程:    * 初始化线程(Initial Thread)    * UI事件调度线程(EDT)    * 任务线程(Worker Thread)每个程序必须有一个main方法,这是程序的入口.该方法运行在初始化或启动线程

Java中的守护线程和非守护线程(转载)

<什么是守护线程,什么是非守护线程> Java有两种Thread:“守护线程Daemon”(守护线程)与“用户线程User”(非守护线程). 用户线程:非守护线程包括常规的用户线程或诸如用于处理GUI事件的事件调度线程,Java虚拟机在它所有非守护线程已经离开后自动离开. 守护线程:守护线程则是用来服务用户线程的,比如说GC线程.如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去.(操作系统里面是没有所谓的守护线程的概念,只有守护进程一说,但是Java语言机制是构建在JVM

java future模式 所线程实现异步调用(转载

java future模式 所线程实现异步调用(转载) 在多线程交互的中2,经常有一个线程需要得到另个一线程的计算结果,我们常用的是Future异步模式来加以解决.Future顾名思意,有点像期货市场的“期权”,是“对未来的一种凭证”,例如当我们买了某个房地产开发商的期房,交钱之后,开发商会给我们一个凭证(期权),这个凭证告诉我们等明年某个时候拿这个凭证就可以拿到我们所需要的房子,但是现在房子还没建好.市场上之所以有“期货”,也正由于有这种需求,才有这种供给. 这种应用在GUI上用的比较多,在设

java 使用volatile实现线程数据的共享

直接上代码看效果: public class VolatileTest extends Thread { private volatile boolean isRunning = true; private void setRunning(boolean s) { isRunning = s; } @Override public void run() { System.out.println(isRunning); while (isRunning) { //System.out.printl

java内存模型与线程(转) good

java内存模型与线程 参考 http://baike.baidu.com/view/8657411.htm http://developer.51cto.com/art/201309/410971_all.htm http://www.cnblogs.com/skywang12345/p/3447546.html 计算机的CPU计算能力超强,其计算速度与 内存等存储 和通讯子系统的速度相比快了几个数量级, 数据加载到内存中后,cpu处理器运算处理时,大部分时间花在等待获取去获取磁盘IO.网络通

JAVA并发实现四(守护线程和线程阻塞)

守护线程     Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通.非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程.当VM检测仅剩一个守护线程,而用户线程都已经退出运行时,VM就会退出,因为没有如果没有了被守护者,也就没有继续运行程序的必要了.如果有非守护线程仍然存活,VM就不会退出. 守护线程并非只有虚拟机内部提

在非gui线程使用QMessageBox

最近我写项目的时候遇到一个奇怪的需求,要在工作线程内,根据某个情况弹出一个MessageBox 但是Qt提供的MessageBox只可以在gui线程(主线程)使用,于是我就对QMessageBox封装了一下,让其可以在非gui线程内被调用 特新介绍 1.可以在任何线程调用 2.show后和默认的MessageBox一样是阻塞的,MessageBox关闭后才会返回 注意: 1.我只封装了information,如果需要其他的,请做扩展 上源码 申明: [cpp] view plaincopy #i

Java多线程-新特性-线程池

Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利.为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要. 有关Java5线程新特征的内容全部在java.util.concurrent下面,里面包含数目众多的接口和类,熟悉这部分API特征是一项艰难的学习过程.目前有关这方面的资料和书籍都少之又少,大部分介绍线程方面书籍还停留在java5之前的知识层面上. 在Java5之