你說的應(yīng)該不是sleep吧。呵呵,
江達(dá)網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
這么簡單的話,就沒必要在這里問了。
我猜測呢,你是要在多線程計(jì)時(shí)任務(wù)
Task線程里面有個(gè)while循環(huán)?
那么你需要一個(gè)TimerTask 來控制這個(gè)線程,也就是計(jì)時(shí)線程。
那么這個(gè)計(jì)時(shí)線程,有兩種方法~
第一種,比較不講究的方法,也就是,對結(jié)果處理不好的方式,類似于過時(shí)方法的stop,就是把你的Task線程在TimerTask里面啟動(dòng)。
TimerTask里面類似于
while(true){
Task.start();
Date date = new Date();
while(true){
計(jì)算時(shí)間差,如果時(shí)間差大于超時(shí)時(shí)間,則break
}
}
而在Task線程中,需要加上一行代碼
this.setDeamon(true);
將這個(gè)task任務(wù)設(shè)置成后臺線程。
因?yàn)槭荰imerTask啟動(dòng)的這個(gè)后臺任務(wù)線程, 一旦超時(shí),那么,這個(gè)后臺線程Task將會(huì)被強(qiáng)制shutdown 。
這種方式適用于不怎么嚴(yán)格的線程要求。
還有一種呢,就是比較嚴(yán)格,對后臺處理要求很高的那種。
就是兩個(gè)線程中需要有共享的變量,將結(jié)果,運(yùn)行狀態(tài),都要共享,當(dāng)TimerTask發(fā)現(xiàn)超時(shí)的時(shí)候,會(huì)判斷Task線程的處理結(jié)果。以及運(yùn)行狀態(tài),而做出相應(yīng)的處理。
你問的問題比較寬泛。所以,我只能大致的把思路給介紹一下。
如果,能牽扯到實(shí)際的問題,那樣就容易判斷用那種方式的線程超時(shí)機(jī)制比較好了。呵呵
最后,節(jié)日愉快~~
何不使用線程?
一些說明我已經(jīng)寫在注釋中了
public class Test implements Runnable {
//定義一個(gè)線程
Thread thread;
//用于停止線程的標(biāo)志
private boolean flag=true;
public Test(){
thread=new Thread(this);
}
//因?yàn)樵擃悓?shí)現(xiàn)了Runnable,就必須有run方法,當(dāng)線程啟動(dòng)時(shí),會(huì)調(diào)用這個(gè)run方法
public void run(){
//獲得當(dāng)前的時(shí)間,毫秒為單位
long beginTime=System.currentTimeMillis();
//定義已過去的時(shí)間
long time=0;
while(flag){
//這里寫實(shí)現(xiàn)計(jì)時(shí)的代碼
//在這里,獲得已過去的時(shí)間
time=System.currentTimeMillis()-beginTime;
System.out.println("已過"+time+"毫秒");
//暫停線程1秒鐘,不暫停的話可以把下面代碼去掉
try{
Thread.sleep(1000);
}catch(InterruptedException e1){
e1.printStackTrace();
}
}
}
//這里是啟動(dòng)線程的方法,也就是啟動(dòng)線程
public void start(){
thread.start();
}
//這里是暫停的方法,暫停線程
public void Pause(){
try{
thread.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
//這里是繼續(xù)的方法,喚醒線程
public void Resume(){
thread.notifyAll();
}
//停止線程
public void stop(){
//把flag設(shè)成false,則在run中的while循環(huán)就會(huì)停止循環(huán)
flag=false;
}
public static void main(String []args){
//用于測試
Test t=new Test();
//開始線程
t.start();
try{
//10000毫秒以后結(jié)束線程
Thread.sleep(10000);
}catch(InterruptedException e1){
e1.printStackTrace();
}
//結(jié)束線程
t.stop();
}
}
你要的是這個(gè)吧:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.text.DateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class GUIThread extends JFrame implements java.awt.event.ActionListener{
private JButton jb1 = new JButton("計(jì)時(shí)");
private JButton jb2 = new JButton("當(dāng)前時(shí)間");
private JLabel jl1 = new JLabel("");
private JLabel jl2 = new JLabel("");
public GUIThread(){
super("GUIThread");
this.setSize(300,200);
this.setLocation(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new GridLayout(2,2));
this.jb1.addActionListener(this);
this.jb2.addActionListener(this);
this.add(jb1);
this.add(jl1);
this.add(jb2);
this.add(jl2);
this.setVisible(true);
}
public static void main(String[] args){
new GUIThread();
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object jb = e.getSource();
if(jb == jb1){
new TimingTime(jl1).start();
jb1.setEnabled(false);
}else{
new NowTime(jl2).start();
}
}
}
class NowTime extends Thread{
private JLabel jl;
public NowTime(JLabel jl){
this.jl = jl;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Date d = new Date() ;
this.jl.setText(d.getYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()+" "+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds());
}
}
}
class TimingTime extends Thread{
private JLabel jl;
private long l = new Date().getTime();
public TimingTime(JLabel jl){
this.jl = jl;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int emp = 1000;
int i = (int) ((new Date().getTime() - l)/emp);
jl.setText(String.valueOf(i));
}
}
}
應(yīng)該用線程里面的Timer來控制package com.sy.game.test;
import java.util.Timer;
import java.util.TimerTask;
public class TimeTask {
public static void main(String[] args) {
TimeTask tTask=new TimeTask();
tTask.timeVoid();
}
public void timeVoid(){
final Timer timer = new Timer();
TimerTask tt=new TimerTask() {
@Override
public void run() {
System.out.println("到點(diǎn)啦!");
timer.cancel();
}
};
timer.schedule(tt, 3000);
}
}
整合的:
/*
* java倒計(jì)時(shí)器
* shiyang
* */
package com.sy.game.test;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.Timer;
@SuppressWarnings("unused")
public class TimeController extends JFrame implements ActionListener {
private static final long serialVersionUID = 4603262282860990473L;
private static final int DEFAULT_WIDTH = 200;
private static final int DEFAULT_HEIGHT = 100;
private static final int width = Toolkit.getDefaultToolkit()
.getScreenSize().width;
private static final int height = Toolkit.getDefaultToolkit()
.getScreenSize().height;
private Container container;
private JButton btn;
private JTextField jtfTime;
private Timer tmr;
public TimeController() {
initComponents();
Timer tmr = new Timer(1000, this);
this.tmr = tmr;
setVisible(true);
}
private void initComponents() {
this.setTitle("SY秒表");
this.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
this.setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation((width - DEFAULT_WIDTH) / 2,
(height - DEFAULT_HEIGHT) / 2);
jtfTime = new JTextField("10");
btn = new JButton("開始倒計(jì)時(shí)");
container = getContentPane();
JPanel panel = new JPanel();
panel.add(btn);
panel.add(jtfTime);
this.add(panel);
btn.addActionListener(this);
}
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == btn) {
jtfTime.setText("10");
tmr.start();
} else {
int t;
t = Integer.parseInt(jtfTime.getText());
t--;
jtfTime.setText("" + t);
if (t = 0) {
tmr.stop();
}
}
}
public static void main(String[] args) {
TimeController timeController = new TimeController();
}
}
分享題目:java多線程計(jì)時(shí)代碼 java 多線程計(jì)數(shù)器
文章出自:http://muchs.cn/article32/dohoisc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作、標(biāo)簽優(yōu)化、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)