多线程技术是非常实用的技术,特别是碰到有关运行多个任务的程序,就只有多线程才能满足你的要求。在以下程序中我所展示的是一个倒计时程序及利用Callable接口(不是Runnable接口)来返回一个你所要求的值,关于这方面的知识,你要多看一下API文档中的线程池类executor和callable接口。如果读者感兴趣的话以下的代码一定要认真的看,特别是我标了注释的地方,相信读者一定会有收获的,还可以把下面的代码复制下来自己去运行一下看一下结果,如果不懂的地方可以发到我的邮箱。本人很荣幸为您解答,只要我力所能及的事我一定会去帮助您!
package rick_demo;
import java.awt.*;
import java.awt.event.*;
import java.util.Calendar;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.ArrayList;
import javax.swing.*;
public class Test extends JFrame {
private static final long serialVersionUID = 9195701874098282860L;
private String[] str=new String[10];
String bin = new String();
JTextField jf;
JTextArea ja;
JScrollPane jp;
JButton jButton1;
private static short coin=0;
JButton jButton2;
Calendar now;
int hour;
int hourEnd;
int minute;
int minutend;
int second;
int secondend;
int hourend;
int minutePlus;
int secondPlus;
Thread t;
boolean right = true;
public Test() {
setSize(300, 200);
jf = new JTextField(25);
ja = new JTextArea(20,30);
//ja.append("hello\n"+"world");
jp =new JScrollPane(ja);
jp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
for(int i=0;i<10;i++)
str[i] = new String();
jf.setText("单击按纽进行相应的操作");
jButton1 = new JButton("显示时间剩余时间");
jButton2 = new JButton("暂停");
Container container = getContentPane();
container.setLayout(new FlowLayout());
container.add(jf );
container.add(jButton1);
container.add(jButton2);
container.add(jp);
//获取系统刚开始运行的初始值
now = Calendar.getInstance();
hourEnd = now.get(Calendar.HOUR_OF_DAY) + 1 ;
minutePlus = now.get(Calendar.MINUTE);
secondPlus = now.get(Calendar.SECOND);
t = new Thread(new Runnable() {
public void run() {
while (true) {
while (right) {
try {
Thread.sleep(60);
jf.setText(CalTime());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
});
t.start();
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
right = true;
}
});
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent g) {
right = false;
}
});
setVisible(true);
}
public String CalTime() {
now = Calendar.getInstance();
hour = now.get(Calendar.HOUR_OF_DAY);
minute = now.get(Calendar.MINUTE);
second = now.get(Calendar.SECOND);
if (hourEnd >= hour) {
hourend = hourEnd - hour;
secondend = 59 - second+secondPlus;
minutend = 59 - minute+minutePlus;
}
return "2小时倒计时hour: " + hourend + " minute: " + minutend
+ " second: " + secondend;
}
public String[] work(){ //多线程关键代码
ExecutorService exec= Executors.newCachedThreadPool();
ArrayList
for(int i=0;i<10;i++)
results.add(exec.submit(new TaskT(i)));
for(Future
try{
bin = fuck.get() ;
str[coin] = bin;
coin++;
} catch(InterruptedException e){
System.exit(1);
} catch(ExecutionException e){
}