网站建设资讯

NEWS

网站建设资讯

java多线程计时代码 java 多线程计数器

java 多线程如何让程序运行一定时间后停止

你说的应该不是sleep吧。呵呵,

江达网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站开发等网站项目制作,到程序开发,运营维护。成都创新互联公司2013年开创至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司

这么简单的话,就没必要在这里问了。

我猜测呢,你是要在多线程计时任务

Task线程里面有个while循环?

那么你需要一个TimerTask 来控制这个线程,也就是计时线程。

那么这个计时线程,有两种方法~

第一种,比较不讲究的方法,也就是,对结果处理不好的方式,类似于过时方法的stop,就是把你的Task线程在TimerTask里面启动。

TimerTask里面类似于

while(true){

Task.start();

Date date = new Date();

while(true){

计算时间差,如果时间差大于超时时间,则break

而在Task线程中,需要加上一行代码

this.setDeamon(true);

将这个task任务设置成后台线程。

因为是TimerTask启动的这个后台任务线程, 一旦超时,那么,这个后台线程Task将会被强制shutdown 。

这种方式适用于不怎么严格的线程要求。

还有一种呢,就是比较严格,对后台处理要求很高的那种。

就是两个线程中需要有共享的变量,将结果,运行状态,都要共享,当TimerTask发现超时的时候,会判断Task线程的处理结果。以及运行状态,而做出相应的处理。

你问的问题比较宽泛。所以,我只能大致的把思路给介绍一下。

如果,能牵扯到实际的问题,那样就容易判断用那种方式的线程超时机制比较好了。呵呵

最后,节日愉快~~

java计时器

何不使用线程?

一些说明我已经写在注释中了

public class Test implements Runnable {

//定义一个线程

Thread thread;

//用于停止线程的标志

private boolean flag=true;

public Test(){

thread=new Thread(this);

}

//因为该类实现了Runnable,就必须有run方法,当线程启动时,会调用这个run方法

public void run(){

//获得当前的时间,毫秒为单位

long beginTime=System.currentTimeMillis();

//定义已过去的时间

long time=0;

while(flag){

//这里写实现计时的代码

//在这里,获得已过去的时间

time=System.currentTimeMillis()-beginTime;

System.out.println("已过"+time+"毫秒");

//暂停线程1秒钟,不暂停的话可以把下面代码去掉

try{

Thread.sleep(1000);

}catch(InterruptedException e1){

e1.printStackTrace();

}

}

}

//这里是启动线程的方法,也就是启动线程

public void start(){

thread.start();

}

//这里是暂停的方法,暂停线程

public void Pause(){

try{

thread.wait();

}catch(InterruptedException e){

e.printStackTrace();

}

}

//这里是继续的方法,唤醒线程

public void Resume(){

thread.notifyAll();

}

//停止线程

public void stop(){

//把flag设成false,则在run中的while循环就会停止循环

flag=false;

}

public static void main(String []args){

//用于测试

Test t=new Test();

//开始线程

t.start();

try{

//10000毫秒以后结束线程

Thread.sleep(10000);

}catch(InterruptedException e1){

e1.printStackTrace();

}

//结束线程

t.stop();

}

}

编写一个Java多线程GUI程序(GUIThread.java),有两个按钮,点击第一个按钮、启动一个线程开始计时,并把

你要的是这个吧:

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("计时");

private JButton jb2 = new JButton("当前时间");

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));

}

}

}

写一个计时器 JAVA代码是什么?

应该用线程里面的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("到点啦!");

timer.cancel();

}

};

timer.schedule(tt, 3000);

}

}

整合的:

/*

* java倒计时器

* 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("开始倒计时");

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多线程计时代码 java 多线程计数器
标题路径:http://cdweb.net/article/dohoisc.html