/* 编写3个线程分别实现各自运行时间,第一个线程每隔1秒运行一次,第二每隔5秒第三个每隔10秒 */

class SZ implements Runnable
{
private int x,m;
Thread t1,t2,t3;
public void getName()
{
t1=new Thread();
t1.setName("线程1");
t2=new Thread();
t2.setName("线程3");
t3=new Thread();
t3.setName("线程3");
}
public void getDate()
{
if(Thread.currentThread()==t1)m=1000;
if(Thread.currentThread()==t2)m=5000;
if(Thread.currentThread()==t3)m=10000;
}
public synchronized void run()
{try
{
while(x<100)
{
getDate();
getName();
System.out.println(Thread.currentThread()+"线程已经运行");
x++;Thread.sleep(m);
}}
catch(Exception e)
{
}
}

}
class Clock3
{
public static void main(String[] args)
{
SZ s=new SZ();
s.t1.start();
s.t2.start();
s.t3.start();
}
}//错误是Exception in thread "main" java.lang.NullPointerException at Clock3.ma(Clock3.java:41)

首先,要实现线程类有两种方法。一种就是实现接口,就想你上面的SZ这个类。另一种就是继承Thread类。你直接new一个Thread严格来说也没错误。你的错误我给你写几条:
1、main方法里s没有调用start()方法,自然s.t1也就没有被实例化。
2、即使改正了第1,也可能先执行s.t1.start(),而不是s.start()所以s.t1仍然没被实例化,调用它的start()自然也错误。
最后,为了满足你的要求我给你写了个简单的,相信你能看懂,其实没你想象的那么复杂,如下:
class Clock3
{
public static void main(String[] args)
{
new MyThread("线程1",1000).start();
new MyThread("线程2",5000).start();
new MyThread("线程3",10000).start();
}

}
class MyThread extends Thread {
private long m = 0;
MyThread(String name, long m) {
super(name);
this.m = m;
}
@Override
public void run() {
// TODO Auto-generated method stub
int x = 0;
try
{
while(x<100)
{
System.out.println(Thread.currentThread().getName()+"线程已经运行");
x++;Thread.sleep(m);
}}
catch(Exception e)
{
}

}
}
我测试过了,没问题!
温馨提示:内容为网友见解,仅供参考
无其他回答

编写3个线程分别实现各自运行时间,第一个线程每隔1秒运行一次,第二每隔...
g.drawString(lastdate2,125,10);g.drawString(lastdate3,225,10);}

java启动2个线程第1个线程每隔1秒输出学号输出5次;第2个线程每隔2秒输 ...
public class Main { public static void main(String[] args){ myThread t1 = new myThread(1000);myThread t2 = new myThread(2000);t1.start();t2.start();while (true){ try { Thread.sleep(1000);for(int i=1;i<=5;i++){ System.out.println("学号123456");} } catch (Int...

Java实现监听文件变化的三种方法,推荐第三种
public class WatchServiceDemo {public static void main(String[] args) throws IOException {\/\/ 这里的监听必须是目录Path path = Paths.get("\/Users\/zzs\/temp\/");\/\/ 创建WatchService,它是对操作系统的文件监视器的封装,相对之前,不需要遍历文件目录,效率要高很多WatchService watcher = FileSystems.getDefault(...

用Thread类新建一个线程,每隔1秒钟打印出当前时间,并在5秒后,中断该线...
import java.util.Date;\/ 可运行例子。。author lxq \/ public class MyThread extends Thread{ Override public void run() { \/\/ TODO Auto-generated method stub int time = 5;\/\/结束时间.while(time>0){ System.out.println("当前时间为:"+new Date().toLocaleString());\/\/等待1秒.try {...

c#中如何保证每隔一段时间执行一个动作。
使用Timer控件,在它的Tick事件里编写你希望执行的动作,并通过设置interval设置执行此动作的时间间隔,interval时间是以毫秒为单位的,即如果你把interval值设为1000则此动作每间隔1秒钟执行一次。

在VB中,怎么实现每隔1秒往EXCEL里面写入一个数据?
一般是使用这种方式:线程休眠等待用户鼠标置于EXCEL位置,然后 发送键消息,VB的我没做过,C#现在写了一个,非常简单,看下就明白了。private void button1_Click(object sender, EventArgs e) { \/\/创建线程 Thread thread = new Thread(new ThreadStart(sendmessage)); \/\/休眠5秒等待鼠...

相似回答