强大的多线程和倒计时程序
来源:互联网 发布:淘宝改发货地有影响吗 编辑:程序博客网 时间:2024/06/15 18:17
在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多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采用企业全真模拟开发训练,迅速积累项目经验。让学员迅速获得其他人需要花费两年才能获得的工作技能,无忧就业!
- 强大的多线程和倒计时程序
- 一个JavaScript的倒计时程序
- Android 多线程 和异步的实践:跳转,同步显示时间,倒计时的实现,知识点
- Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger
- 强大的多线程内存分配器jemalloc
- 不依赖客户端时间的倒计时js程序
- 不依赖客户端时间的倒计时js程序
- 简单的北京奥运会倒计时 java 程序
- 利用uipickerview获取时间的倒计时程序
- 调用服务器时间的倒计时程序
- 简单的JS倒计时小程序
- VS2005 实现倒计时天数的程序
- 很实用的javascript date(时间)时针和倒计时网页程序
- 15秒的倒计时和15分钟的倒计时
- Grep 和awk的强大
- 强大的lambda和reduce
- 实现.NET和JAVA程序互调的强大工具IKVM【原】
- 一个强大的小程序-Phun
- crontab的设置与应用
- Linux内核中的FM RDS浅析
- Java设计模式---静态代理
- C语言宏定义技巧(常用宏定义)
- JQuery中关于jquery.js与jquery.min.js的比较
- 强大的多线程和倒计时程序
- hibernate4 操作postgresql 注意事项
- RedHat系统的Yum安装
- 新建Android项目
- 前辈们的总结
- jquery的each()详细介绍
- MFC 关于控件变量的使用
- windows 遠端訪問Ubundu 12.04無法看到桌面設定
- ORACLE数据字典视图