在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java学习,请搜索疯狂Java;
多线程技术是非常实用的技术,特别是碰到有关运行多个任务的程序,就只有多线程才能满足你的要求。在以下程序中我所展示的是一个倒计时程序及利用Callable接口(不是Runnable接口)来返回一个你所要求的值,关于这方面的知识,你要多看一下API文档中的线程池类executor和callable接口。如果读者感兴趣的话以下的代码一定要认真的看,特别是我标了注释的地方,相信读者一定会有收获的,还可以把下面的代码复制下来自己去运行一下看一下结果,如果不懂的地方可以发到我的邮箱。本人很荣幸为您解答,只要我力所能及的事我一定会去帮助您!
packagerick_demo;
importjava.awt.*;
importjava.awt.event.*;
importjava.util.Calendar;
importjava.util.concurrent.Callable;
importjava.util.concurrent.ExecutionException;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;
importjava.util.concurrent.Future;
importjava.util.ArrayList;
importjavax.swing.*;
public classTest extends JFrame {
privatestatic final long serialVersionUID = 9195701874098282860L;
privateString[] str=new String[10];
String bin =new String();
JTextFieldjf;
JTextAreaja;
JScrollPanejp;
JButtonjButton1;
privatestatic short coin=0;
JButtonjButton2;
Calendarnow;
int hour;
int hourEnd;
int minute;
intminutend;
int second;
intsecondend;
int hourend;
intminutePlus;
intsecondPlus;
Thread t;
booleanright = true;
publicTest() {
setSize(300,200);
jf = newJTextField(25);
ja = newJTextArea(20,30);
//ja.append("hello\n"+"world");
jp =newJScrollPane(ja);
jp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
jp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
for(inti=0;i<10;i++)
str[i] = newString();
jf.setText("单击按纽进行相应的操作");
jButton1 =new JButton("显示时间剩余时间");
jButton2 =new JButton("暂停");
Containercontainer = getContentPane();
container.setLayout(newFlowLayout());
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 = newThread(new Runnable() {
public voidrun() {
while (true){
while(right) {
try {
Thread.sleep(60);
jf.setText(CalTime());
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
}
});
t.start();
jButton1.addActionListener(newActionListener() {
public voidactionPerformed(ActionEvent event) {
right =true;
}
});
jButton2.addActionListener(newActionListener() {
public voidactionPerformed(ActionEvent g) {
right =false;
}
});
setVisible(true);
}
publicString 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;
}
publicString[] work(){ //多线程关键代码
ExecutorServiceexec= Executors.newCachedThreadPool();
ArrayList>results= new ArrayList>();
for(inti=0;i<10;i++)
results.add(exec.submit(newTaskT(i)));
for(Futurefuck : results)
try{
bin =fuck.get() ;
str[coin] =bin;
coin++;
}catch(InterruptedException e){
System.exit(1);
}catch(ExecutionException e){
}
exec.shutdown();
return str;
}
public voidsetStr(String[] alph){
for(inti=0;i
ja.append(alph[i]+"\n");
}
publicstatic void main(String args[]) {
Test sleep =new Test();
sleep.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sleep.setStr(sleep.work());
}
}
class TaskTimplements Callable{
private intid=0;
publicTaskT(int id){
this.id=id;
}
publicString call(){
return"TaskT "+id;
}
}
疯狂Java培训的课程采用针对性培养,全面提升学员就业能力,重点加强训练职业素质。老师辛勤的讲解,让学员充分感受Java的魅力,充分激发每个学员对于编程的热爱,让学员在半年的时间内掌握8-10万的代码量,成为真正的技术高手,疯狂Java采用企业全真模拟开发训练,迅速积累项目经验。让学员迅速获得其他人需要花费两年才能获得的工作技能,无忧就业!