`
3213213333332132
  • 浏览: 79914 次
社区版块
存档分类
最新评论

java线程的无限循环和退出

    博客分类:
  • java
阅读更多
最近想写一个游戏,然后碰到有关线程的问题,网上查了好多资料都没满足。
突然想起了前段时间看的有关线程的视频,于是信手拈来写了一个线程的代码片段。
希望帮助刚学java线程的童鞋
package thread;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

/**
 * 线程没完没了的循环
 *
 * @author FuJianyong
 * 2015-6-16下午09:22:11
 */
public class EndlessLoop {

	//是否结束线程的旗标
	volatile boolean flag = true;
	//控制是否输出数字
	volatile boolean numIncrement = false;
	
	class Endless extends Thread{
	    public void run(){
	      long startTime = System.currentTimeMillis();	
	      System.out.println("线程开始正在生成随机数...");
	      while(flag){
	    	  Random random = new Random();
	    	  //随机数开关
	    	  int power = 0;
	    	  power = random.nextInt(50);
	    	  System.out.println("while循环产生的随机数:\t" + power);
	    	  if(power == 19){
	    		  //结束线程
	    		  flag = false;
	    		  break;
	    	  }
	    	  //计数
	    	  int i = 0;
	    	  for(;;){
	    		  power = random.nextInt(888);
	    		  if(power % 2 == 0 || power > 200){
		    		  //偶数则计数器增加
		    		  numIncrement = true;
		    	  }else{
		    		  //奇数则计数器停止增加
		    		  numIncrement = false;
		    	  }
	    		  if(numIncrement){
		    		  System.out.println("for循环产生的随机数是:\t" + power + "\t计数器增加:\t" + ++i + "\t" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
		    		  try {
						Thread.sleep(power * 2);
					  } catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					  }
	    		  }else{
	    			  System.out.println("for循环产生的随机数是:\t" + power + "\t计数器停止...");
	    			  break;
	    		  }
	    	  }
	      }
	      long endTime = System.currentTimeMillis();
	      System.out.println("线程结束等待垃圾回收...");
	      System.out.println("=====线程执行开始时间为:\t" + new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒").format(startTime));
              System.out.println("=====线程执行结束时间为:\t" + new SimpleDateFormat("yyyy 年 MM 月 dd 日 HH 时 mm 分 ss 秒").format(endTime));
	   }
	}
	public void start(){
	   	new Endless().start();
	}
	
	public static void main(String[] args) {
		new EndlessLoop().start();
	}
	
}

  • 大小: 37 KB
2
0
分享到:
评论

相关推荐

    Java中一个线程执行死循环有什么后果

    在编写多线程程序时,应当避免不必要的死循环,或者在循环中加入适当的退出条件,确保程序的合理性和资源的有效利用。同时,正确地使用同步机制可以有效地控制线程间的交互,避免出现不必要的阻塞和资源浪费。

    java线程.rar

    Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是通过类`Thread`或实现`Runnable`接口来创建和管理的。Java线程模型是基于操作系统的原生...

    java 多线程示例

    Java线程有10个优先级,从`MIN_PRIORITY`(1)到`MAX_PRIORITY`(10),默认是`NORM_PRIORITY`(5)。优先级高的线程更可能被调度执行,但不保证。 4. **线程同步** 当多个线程访问共享资源时,可能会出现竞态条件,...

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...

    java通过线程控制程序执行超时(新)

    Java的线程提供了中断机制,通过`Thread.interrupt()`和`Thread.isInterrupted()`方法来控制和检查线程中断状态。在长时间运行的任务中,应定期检查中断标志,一旦检测到中断,及时清理资源并退出。 ```java ...

    JAVA线程停止的方法

    4. **停止线程**:`public void stop()`方法中,将`flag`设置回`false`,从而使得`while`循环退出,线程停止运行。 ### 最佳实践与注意事项 虽然使用标志变量是一种优雅的线程停止策略,但在实际应用中还需注意...

    java多线程例子

    然后,在 while 循环中,我们输出当前线程的名称和状态。 第二个例子:前台线程和后台线程 在 Java 中,有两种类型的线程:前台线程(用户线程)和后台线程(守护线程)。前台线程是用户创建的线程,而后台线程是 ...

    Java多线程编程线程的协同、停止、暂停、继续等操作实现

    若想实现类似暂停和恢复的功能,可以采用类似停止线程的方法,使用标志变量配合循环检查。 4. **中断机制** Java提供了一个更安全的中断线程的机制,即`Thread.interrupt()`。当调用`interrupt()`时,目标线程的...

    java线程入门 Java线程编程很好的入门书

    Java线程是多任务编程的重要组成部分,特别是在Java这种支持并发执行的语言中,理解和掌握线程的概念及使用至关重要。本文将基于提供的"Java线程入门"资料,深入探讨Java线程编程的基本概念、创建方法以及常见操作,...

    java多线程面试题和答案

    在Java编程领域,多线程是一项至关重要...这些面试题和答案覆盖了Java多线程的核心知识点,有助于深入理解和掌握Java并发编程。在实际项目中,理解并熟练运用这些概念能够帮助开发者构建出更加高效、健壮的多线程应用。

    Java多线程结构_Java多线程结构_

    Java线程有五种状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和终止(Terminated)。了解这些状态有助于调试和优化多线程程序。 7. 死锁问题: 当两个或更多线程相互等待对方释放资源...

    java线程例子大全

    Java线程是并发编程的核心部分,它允许程序同时执行多个任务,从而提高系统效率和响应速度。在Java中,线程有两种主要的创建方式:通过继承`Thread`类和实现`Runnable`接口。本资源“java线程例子大全”包含了十八个...

    Java线程.pdf

    - **避免无限循环:** 无限循环会导致线程无法正常退出,应使用条件退出循环。 - **使用并发集合:** `java.util.concurrent`包提供了专门用于多线程环境的集合类。 #### 七、总结 通过本教程的学习,你已经掌握了...

    java线程基础(IBM教程)

    Java线程基础是Java编程中的重要组成部分,尤其在多核处理器和并发编程需求日益增长的今天,理解并掌握线程的使用至关重要。IBM提供了一系列的Java线程教程,旨在帮助开发者深入理解Java线程的基本概念、创建与管理...

    java线程案例

    "Java线程案例"这个主题深入探讨了如何在Java中创建、管理和同步线程,这对于理解和掌握多线程编程至关重要。 线程的创建在Java中有多种方式: 1. 继承`Thread`类:创建一个新的类,继承自`Thread`类,重写`run()`...

    java多线程笔记

    Java线程是多任务编程的重要组成部分,它允许程序同时执行多个独立的代码片段,从而提高程序的效率和响应性。本文将深入探讨Java线程的概念、原理以及如何在实际编程中进行有效管理。 首先,我们要了解操作系统中的...

    java多线程和锁,用于学习参考

    除了锁,Java还提供了其他并发工具,如`Semaphore`(信号量)用于限制同时访问特定资源的线程数量,`CyclicBarrier`(循环栅栏)让一组线程等待所有线程到达某个点后继续执行,`CountDownLatch`(计数器门锁)则允许...

    java多线程的两种实现

    Java线程有10个优先级,`Thread.MIN_PRIORITY` (1)到`Thread.MAX_PRIORITY` (10),默认优先级是`Thread.NORM_PRIORITY` (5)。不过,线程优先级对实际调度的影响并不大,因为大多数操作系统不支持优先级调度。 6. *...

    Java线程学习和总结

    【Java线程学习和总结】 Java线程是并发编程的核心,它使得程序能够同时执行多个任务,提高了系统资源的利用率和程序的响应速度。在Java中,线程有两种创建方式:通过实现Runnable接口或者继承Thread类。理解线程的...

    java多线程编程

    Java线程具有优先级,`Thread.NORM_PRIORITY`是默认优先级,可以通过`setPriority()`设置优先级。但优先级并不保证线程的执行顺序,因为线程调度取决于JVM和操作系统。 6. **线程池** Java的`ExecutorService`和`...

Global site tag (gtag.js) - Google Analytics