java多線程計(jì)時(shí)代碼 java 多線程計(jì)數(shù)器

java 多線程如何讓程序運(yùn)行一定時(shí)間后停止

你說的應(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é)日愉快~~

java計(jì)時(shí)器

何不使用線程?

一些說明我已經(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è)Java多線程GUI程序(GUIThread.java),有兩個(gè)按鈕,點(diǎn)擊第一個(gè)按鈕、啟動(dòng)一個(gè)線程開始計(jì)時(shí),并把

你要的是這個(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));

}

}

}

寫一個(gè)計(jì)時(shí)器 JAVA代碼是什么?

應(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)

成都網(wǎng)站建設(shè)