java创建线程代码_Java创建与结束线程代码示例
本文讲述了在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创建与结束线程代码示例相关推荐
- java结束全部操作代码_Java创建与结束线程代码示例
这篇文章主要介绍了Java创建与结束线程代码示例,小编觉得挺不错的,这里分享给大家,供需要的朋友参考. 本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者.一些高级知识如线程 ...
- java创建临时文件夹_java创建临时文件
[java]代码库/** * 创建临时文件 * * @param prefix * 临时文件名的前缀 * @param suffix * 临时文件名的后缀 * @param dirName * 临时文 ...
- java目录实用工具_JAVA 创建文件和文件夹,删除文件和文件夹的实用工具
package com.file; import java.io.File; import java.io.IOException; //创建新文件和目录 public class CCRDFile ...
- java 创建新文件_Java创建新文件
创建文件是一种非常常见的IO操作,在这一小节中我们将学习如何在java中创建文件的几个方法. 在java中创建文件有三种流行的方法,下面将一个一个地来学习. 方法一:使用File.createNewF ...
- java excel 展开折叠_Java 创建、刷新Excel透视表/设置透视表行折叠、展开
透视表是依据已有数据源来创建的交互式表格,我们可在excel中创建透视表,也可编辑已有透视表.本文以创建透视表.刷新透视表以及设置透视表的行展开或折叠为例,介绍具体的操作方法. 所需工具:Free S ...
- java开发保险案例_Java实现双保险线程的示例代码
双保险线程,每次启动2个相同的线程,互相检测,避免线程死锁造成影响. 两个线程都运行,但只有一个线程执行业务,但都会检测对方的时间戳 如果时间戳超过休眠时间3倍没有更新的话,则重新启动对方线程. 例子 ...
- java生成文件夹_java 创建文件夹和文件 汇总
前提 D盘存在文件夹a,文件D:/a/b/c 不存在 1.默认file.exists().file.isFile().file.isDirectory() 均返回 false 2.使用file.cre ...
- java线程池_Java多线程并发:线程基本方法+线程池原理+阻塞队列原理技术分享...
线程基本方法有哪些? 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等. 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等 ...
- java线程死锁_Java并发:隐藏线程死锁
java线程死锁 大多数Java程序员熟悉Java线程死锁概念. 它本质上涉及2个线程,它们彼此永远等待. 这种情况通常是平面(同步)或ReentrantLock(读或写)锁排序问题的结果. Foun ...
最新文章
- 【css】页面出现两个滚动条以及只有一半页面显示内容的解决方法
- Linux下sh/bash/source/.命令的区别(转)
- android怎么判断程序进入了后台,Android检测应用程序是否进入后台
- 兼顾隐私与权利,华为以“科技有道”,实现“隐私无价”
- Java判断上传的文件是否是图片,如果是就对上传的图片进行压缩
- Gson转换导致int转换成double的问题解决
- 信管家源代码c语言,用队列实现按层次创建二叉树的源代码,最好是C语言
- join原理、join算法
- IIS 漏洞工具解析
- Excel常用的功能
- excel如何利用VBA一键更改所有文件的名称
- Window底部任务栏点击没反应,桌面正常
- 神棍节献礼之——POJ1111 Image Perimeters(bfs)
- 计算机更换内存条后无法连接网络,换主机后怎么连接网络
- 游戏玩家的“梦想”,ROG Phone 6出圈,双USB-C,还有两个屏幕?
- 分析classpath、path、JAVA_HOME的作用及JAVA环境变量配置(转发博客园)
- 【树莓派C语言开发】实验15:电位计传感器(关联PCF8951)
- PIV流场流速矢量图、流线图(MATLAB quiver函数的用法)
- win xp32位系统安装mysql详细步骤
- 大学生极速成长系列教程—7.IT类大学生如何打造个人品牌
热门文章
- Java学习资料-SimpleFactory
- [Apache] Apache 從 2.2 換至 2.4 httpd.conf 的調整筆記 (windows 環境)
- reactive programming 1.5 monads
- Django获取model中字段的中文列名
- arm下如何烧写指定分区大小的内核和文件系统
- 老公,等儿子长大,我去天堂找你(推荐)
- 威联通装linux百度网盘,威联通NAS使用百度云Docker教程,超简单!
- java servlet例子_Servlet学习教程(三)---- 一个简单的Servlet例子
- 【转】SAP Cloud Platform平台下,ABAP人员的出路在哪里
- JCO3远程调用SAP接口随笔一(配置连接池)