Java线程未睡眠
我有以下代码(完整源代码):-Java线程未睡眠,java,multithreading,Java,Multithreading,我有以下代码(完整源代码):- Thread中的sleep方法是静态的,因此应该将其称为Thread.sleep(),它实际上使当前正在执行的线程处于睡眠状态,而不是调用该方法的特定线程实例。这里的基本问题是,您永远不会启动线程。在默认线程上调用程序的main,您创建一个实例,然后对其不做任何操作 如果要启动线程,请调用t.start()(一次)。这将启动线程,该线程将与JVM在运行程序时创建的默认线程一起运行。除了两个线程同时运行之外,它们在您的程序中不进行交互,因此您仍然可以看到数字立即打印
Thread
中的sleep
方法是静态的,因此应该将其称为Thread.sleep()
,它实际上使当前正在执行的线程处于睡眠状态,而不是调用该方法的特定线程实例。这里的基本问题是,您永远不会启动线程。在默认线程上调用程序的main
,您创建一个实例,然后对其不做任何操作
如果要启动线程,请调用t.start()
(一次)。这将启动线程,该线程将与JVM在运行程序时创建的默认线程一起运行。除了两个线程同时运行之外,它们在您的程序中不进行交互,因此您仍然可以看到数字立即打印出来。根据您试图执行的操作,您可能希望将循环从main
移动到run
(是的,sleep
是一个静态方法,它使当前线程处于睡眠状态。在Java中,通过实例引用调用静态方法在语法上是有效的,但这不是一个好主意。)
例如,这是一个具有最小mod的类(注意:您的环境似乎创建了一个实例,并调用下面特定于实例的main
,这是非标准的,但我将其放在一边,因为它似乎是您的环境所做的):
您的代码应该更像这样。我已经有一段时间没有处理线程了,所以可能会有一些小错误,人们可以随意编辑
class myThread implements Runnable
{
public void main(){
MyThread t= new MyThread();
t.start();
t.join();
}
public void run(){
try{
for(i=0;i<=5;i++){
System.out.println(i);
Thread.sleep(1000);
}
}
catch(InterruptedException e){
}
}
}
myThread类实现可运行
{
公共图书馆{
MyThread t=新的MyThread();
t、 start();
t、 join();
}
公开募捐{
试一试{
对于(i=0;i您没有启动线程…另外,sleep
是一个static
方法。谁调用了您的“main”方法,这不是公共静态void main我正在用blueJ编写这个程序,我正在运行main方法@RamonBoza@SotiriosDelimanolis当我使用t.start()时在循环中,我得到以下错误->java.lang.IllegalThreadStateException在java.lang.Thread.start(Thread.java:682)在Thread.main(Thread.java:7)
运行时,您可以只启动一次Thread。完美的答案,Indeed您的代码也不会等待1秒…我所做的是在循环中(在main方法中),我把这个->run()
而且它是有效的!@BenLind:你从来不会直接调用线程的run
方法或Runnable
方法;当你运行线程时,它是隐式调用的。如果你直接调用run
方法,你会在当前线程上执行该方法,而不是在新线程上执行该方法。我不知道你对上面的代码的意思是什么,不等待一秒钟;它会自动执行oes.Proof:您可以使用更大的时间值进行检查当您调用run()时,您不是在运行线程,您只是在调用一个方法。请尝试在t.start()之后添加t.join();以告诉您的程序在退出之前等待线程完成执行。
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:682)
at thread.main(thread.java:7)
class ThreadExample implements Runnable
{
public void main(){
Thread t= new Thread(this);
t.start();
}
public void run(){
int i;
try{
Thread.sleep(1000);
for(i=0;i<=5;i++){
System.out.println(i);
}
}
catch(InterruptedException e){
}
}
}
class ThreadExample implements Runnable
{
public static void main(String[] args) {
Thread t = new Thread(new ThreadExample());
t.start();
}
public void run(){
int i;
try{
Thread.sleep(1000);
for(i=0;i<=5;i++){
System.out.println(i);
}
}
catch(InterruptedException e){
}
}
}
class myThread implements Runnable
{
public void main(){
MyThread t= new MyThread();
t.start();
t.join();
}
public void run(){
try{
for(i=0;i<=5;i++){
System.out.println(i);
Thread.sleep(1000);
}
}
catch(InterruptedException e){
}
}
}