java thread while(true)什么意思

java,线程t2.setDaemon(true); 什么意思?什么作用?~

设置t2为守护线程。
守护线程在没有用户线程可服务时自动离开,在Java中比较特殊的线程是被称为守护(Daemon)线程的低级别线程。这个线程具有最低的优先级,用于为系统中的其它对象和线程提供服务。将一个用户线程设置为守护线程的方式是在线程对象创建之前调用线程对象的setDaemon方法。典型的守护线程例子是JVM中的系统资源自动回收线程,我们所熟悉的Java垃圾回收线程就是一个典型的守护线程,当我们的程序中不再有任何运行中的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是Java虚拟机上仅剩的线程时,Java虚拟机会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。那Java的守护线程是什么样子的呢。当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则JVM不会退出。

这个问题要看几率

买彩票中500W的几率能达到你想要的效果,呵呵

问题主要是这样的:

这个和你调用sleep基本上没多大关系

main线程里面一开始就启动了子线程,这时候2个线程同时运行,去抢占CPU时间片

大多数时候,子线程一直执行,不停的打印,当子线程执行到下面这条语句:
System.out.println("----" + new Date() + "----");
main线程抢到了时间片,所以main线程又开始执行,main执行期间正好把flag 设置为false

然后子线程抢到时间片,开始执行,打印flag,很明显,打印的结果是false,因为flag的值已经被main线程修改了,这里的关键点就是在子线程打印flag的值的时候,子线程根本就没有进行while的判断,因为子线程上次执行的时候已经判断通过了,所以看上去子线程有点不听话,多执行了一次

其实如果“flag都已经为false了,while里面的语句还会继续执行”这句话成立的话,你看到的打印效果肯定不只5行,肯定是死循环一直打印,对吧


简单的修改可以这样:
public class TestInterrupt {
public static void main(String[] args) {
MyThread mt = new MyThread();
mt.start();
try {
// Thread.sleep(1000);
System.out
.println(Thread.currentThread().getName() + " is running");
} catch (Exception e) {
}
synchronized (mt.flag) {
mt.flag = false;
}
}
}

class MyThread extends Thread {
Boolean flag = true;

public void run() {

while (true) {
synchronized (flag) {
if(!flag) {
System.out.println("flag is false, exit");
break;
}
System.out.println(Thread.currentThread().getName()
+ " is running");
System.out.println("----" + new Date() + "----");
try {
// sleep(2000);
System.out.println(flag);
System.out.println("***" + Thread.currentThread().getName()
+ " is running" + "***");
} catch (Exception e) {
break;
}
}
}
}
}


貌似可以实现,没有测试

也就是说当程序执行到 while(true){ } 时循环条件永远为真,也就是所说的无限循环。这样用时必须在循环体重定义退出循环的语句,否则程序将陷入死循环!!

java thread while(true)的意思是循环执行某段代码或者方法,示例如下:

while (true) {//死循环,重复执行下列代码
System.out.println("yours code");
Thread.sleep(3000);//睡眠3秒
}


这里的true是常量 是布尔类型的
就好比 你输出一句话 System.out.println("hello world!")

"hello world!"就是字符串常量一样
while(true)在这里就是条件成立 进行无限循环的意思

相关兴趣推荐

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网