本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者。一些高级知识如线程同步、调度、线程池等内容将会在后续章节中逐步深入。

创建线程

创建普通线程有两种方式,继承Thread类或实现Runnable接口。示例如下。

方法1:继承Thread类

创建方法示例:

public class MyThread1 extends Thread {

@Override

public void run() {

//TODO Auto-generated method stub

super.run();

System.out.println("Execute thread:MyThread1");

}

}

方法2:实现Runnable接口

创建方法示例:

public class MyRunnable1 implements Runnable {

@Override

public void run() {

//TODO Auto-generated method stub

System.out.println("Execute thread:MyRunnable1");

}

}

运行线程

针对上述两种方法,调用线程开始运行的方法分别如下。

方式示例1:new MyThread1().start();

方法示例2:new Thread(new MyRunnable1()).start();

停止线程

请不要采取已经过时(deprecated)的java.lang.Thread.stop方法,不论你因为何种原因需要暂停或完全结束当前正在运行的线程。

常见的退出线程的方法如下。

方式1:线程自动退出

线程执行完毕,自动退出。例如网络下载线程,当后台下载完后,线程自动退出。

方法2:使用interrupt主动退出

在主线程中,调用线程对象的interrupt()方法,设置线程状态。

final Thread t = new MyThread2();

t.start();

try {

Thread.sleep(500);

} catch(InterruptedException e) {

e.printStackTrace();

}

t.interrupt();

在子线程中,调用isInterrupted()方法判断线程状态。如果返回true,则可以结束线程运行。如下示例代码,在线程中有一个while循环,每次循环都会判断线程状态,如果为true,则停止循环,退出线程。

public class MyThread2 extends Thread {

@Override

public void run() {

super.run();

while(true) {

// Cancel thread when call interrupt() method

if (Thread.currentThread().isInterrupted()) {

break;

}

}

}

}

在主线程中调用interrupt设置状态,在子线程中通过isInterrupted获取状态,是最好的结束线程的方法。注意主线程中一旦调用interrupt,子线程中相关的sleep, wait方法在执行时会抛出InterruptedException异常,此时也可以通过捕获这种异常来结束线程。

方式3:使用预设标志主动退出

预设一个退出标志,通过判断标志的值结束线程运行。这种情况常见于循环执行中的任务。在每次循环时,判断标志值。如下示例,在线程while循环中判断mCancelFlag标志。

public class MyThread3 extends Thread {

private boolean mCancelFlag;

@Override

public void run() {

super.run();

System.out.println("Thread start");

while (mCancelFlag) {

// Cancel thread when call interrupt() method

break;

}

System.out.println("Thread over");

}

public void cancelThread() {

mCancelFlag = true;

}

}

当主线程希望主动结束线程时,调用线程的cancelThread方法设置mCancelFlag即可。

final MyThread3 t = new MyThread3();

t.start();

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

// stop thread

t.cancelThread();

如果在线程执行时,需要主动退出线程,最佳的方式为方法2。用户根据实际情况,例如更多的状态控制,也可以使用方法3。

一句话总结

创建线程:继承Thread类或实现Runnable接口。

结束线程:调用interrupt方法。

总结

以上就是本文关于Java创建与结束线程代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解、Java编程之多线程死锁与线程间通信简单实现代码、Java编程利用socket多线程访问服务器文件代码示例等,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

java创建线程代码_Java创建与结束线程代码示例相关推荐

  1. java结束全部操作代码_Java创建与结束线程代码示例

    这篇文章主要介绍了Java创建与结束线程代码示例,小编觉得挺不错的,这里分享给大家,供需要的朋友参考. 本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者.一些高级知识如线程 ...

  2. java创建临时文件夹_java创建临时文件

    [java]代码库/** * 创建临时文件 * * @param prefix * 临时文件名的前缀 * @param suffix * 临时文件名的后缀 * @param dirName * 临时文 ...

  3. java目录实用工具_JAVA 创建文件和文件夹,删除文件和文件夹的实用工具

    package com.file; import java.io.File; import java.io.IOException; //创建新文件和目录 public class CCRDFile ...

  4. java 创建新文件_Java创建新文件

    创建文件是一种非常常见的IO操作,在这一小节中我们将学习如何在java中创建文件的几个方法. 在java中创建文件有三种流行的方法,下面将一个一个地来学习. 方法一:使用File.createNewF ...

  5. java excel 展开折叠_Java 创建、刷新Excel透视表/设置透视表行折叠、展开

    透视表是依据已有数据源来创建的交互式表格,我们可在excel中创建透视表,也可编辑已有透视表.本文以创建透视表.刷新透视表以及设置透视表的行展开或折叠为例,介绍具体的操作方法. 所需工具:Free S ...

  6. java开发保险案例_Java实现双保险线程的示例代码

    双保险线程,每次启动2个相同的线程,互相检测,避免线程死锁造成影响. 两个线程都运行,但只有一个线程执行业务,但都会检测对方的时间戳 如果时间戳超过休眠时间3倍没有更新的话,则重新启动对方线程. 例子 ...

  7. java生成文件夹_java 创建文件夹和文件 汇总

    前提 D盘存在文件夹a,文件D:/a/b/c 不存在 1.默认file.exists().file.isFile().file.isDirectory() 均返回 false 2.使用file.cre ...

  8. java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...

    线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...

  9. java线程死锁_Java并发:隐藏线程死锁

    java线程死锁 大多数Java程序员熟悉Java线程死锁概念. 它本质上涉及2个线程,它们彼此永远等待. 这种情况通常是平面(同步)或ReentrantLock(读或写)锁排序问题的结果. Foun ...

最新文章

  1. 【css】页面出现两个滚动条以及只有一半页面显示内容的解决方法
  2. Linux下sh/bash/source/.命令的区别(转)
  3. android怎么判断程序进入了后台,Android检测应用程序是否进入后台
  4. 兼顾隐私与权利,华为以“科技有道”,实现“隐私无价”
  5. Java判断上传的文件是否是图片,如果是就对上传的图片进行压缩
  6. Gson转换导致int转换成double的问题解决
  7. 信管家源代码c语言,用队列实现按层次创建二叉树的源代码,最好是C语言
  8. join原理、join算法
  9. IIS 漏洞工具解析
  10. Excel常用的功能
  11. excel如何利用VBA一键更改所有文件的名称
  12. Window底部任务栏点击没反应,桌面正常
  13. 神棍节献礼之——POJ1111 Image Perimeters(bfs)
  14. 计算机更换内存条后无法连接网络,换主机后怎么连接网络
  15. 游戏玩家的“梦想”,ROG Phone 6出圈,双USB-C,还有两个屏幕?
  16. 分析classpath、path、JAVA_HOME的作用及JAVA环境变量配置(转发博客园)
  17. 【树莓派C语言开发】实验15:电位计传感器(关联PCF8951)
  18. PIV流场流速矢量图、流线图(MATLAB quiver函数的用法)
  19. win xp32位系统安装mysql详细步骤
  20. 大学生极速成长系列教程—7.IT类大学生如何打造个人品牌

热门文章

  1. Java学习资料-SimpleFactory
  2. [Apache] Apache 從 2.2 換至 2.4 httpd.conf 的調整筆記 (windows 環境)
  3. reactive programming 1.5 monads
  4. Django获取model中字段的中文列名
  5. arm下如何烧写指定分区大小的内核和文件系统
  6. 老公,等儿子长大,我去天堂找你(推荐)
  7. 威联通装linux百度网盘,威联通NAS使用百度云Docker教程,超简单!
  8. java servlet例子_Servlet学习教程(三)---- 一个简单的Servlet例子
  9. 【转】SAP Cloud Platform平台下,ABAP人员的出路在哪里
  10. JCO3远程调用SAP接口随笔一(配置连接池)