一个多线程应用举例 : 优化界面交互

例 1 : 在不使用多线程时,程序只有一个主线程,程序顺序执行,在计算过程中,窗口无法相应,不能关闭窗口。

/** * @(#)ThreadPerformed.java * * * @author * @version 1.00 2010/4/26 */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ThreadPerformed extends JFrame implements ActionListener{ JButton jbOk=new JButton("确定"); double test; public ThreadPerformed() { this.setTitle("多线程优化界面的显示"); this.setBounds(200,300,350,200); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jbOk.setMargin(new Insets(0,0,0,0)); this.add(jbOk,BorderLayout.NORTH); jbOk.addActionListener(this); } public void actionPerformed(ActionEvent e){ // 没有利用多线程点击完确定按钮后,界面由于进行运算而卡住不能响应,当运算结束才能进行关闭操作 for (long i=0;i<100000;i++){// 循环计算并输出一个数 test=test+Math.random()*Math.PI; System.out.println(test); } } public static void main (String[] args) { new ThreadPerformed(); } }

例 2 : 使用多线程优化后的程序,开辟一个新的线程 专门负责计算,主程序线程控制交互,在计算过程中同样可以关闭窗口。

/** * @(#)ThreadPerformed2.java * * * @author * @version 1.00 2010/4/26 */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ThreadPerformed2 extends JFrame implements ActionListener{ JButton jbOk=new JButton("确定"); double test; public ThreadPerformed() { this.setTitle("多线程优化界面的显示"); this.setBounds(200,300,350,200); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jbOk.setMargin(new Insets(0,0,0,0)); this.add(jbOk,BorderLayout.NORTH); jbOk.addActionListener(this); } public void actionPerformed(ActionEvent e){ MyTread tt=new MyTread(); tt.start(); /* 没有利用多线程点击完确定按钮后,界面由于进行运算而卡住不能响应, for (long i=0;i<100000;i++){// 循环计算并输出一个数 test=test+Math.random()*Math.PI; System.out.println(test); } */ } public static void main (String[] args) { new ThreadPerformed2(); } } //开辟一个单独的线程,负责复杂计算,点击完确定按钮后,界面立刻就响应,计算在后台进行 class MyTread extends Thread { double test; public void run(){ for(long i=0;i<100000;i++) { //循环计算并输出一个数 test=test+Math.random()*Math.PI; System.out.println(test); } } }

你可能感兴趣的:(JavaSE)