创建线程可以是继承Thread类,也可以是声明实现 Runnable 接口的类
线程:是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。
线程状态
1.NEW
刚刚new出来还未调用start()方法都处于NEW状态。
2.RUNNABLE
正在java虚拟机中国之行的线程处于这种状态。是调用了start()方法后的状态。
3.BLOCKED
受阻塞并等待某个监视器锁的线程处于这种状态。 阻塞与等待不同,阻塞通常是得不到所需要的资源而被迫停下来等待。
4.WAITING
无限期地等待另一个线程来执行某一特定操作的线程处于这种状态。
5.TIMED_WAITING
等待另一个线程来执行取决于指定等待时间的操作的线程处于这种状态。
6.TERMINATED
已退出的线程处于这种状态。有两种情况会让线程退出,其一是run方法中的任务执行完成,其二是线程执行时出现异常。
java的线程状态只有如上6中,他们以enum形式被定义在Thread.State中。
join()
阻塞当前线程,然后让接受者完成任务之后,才能继续执行其他任务。
interrupt() 中断
(1).Thread.currentThread().interrupt(); 单独执行不会报异常,能中断线程。
(2).Thread.currentThread().interrupt(); 执行之后再执行
Thread.sleep(100); 报java.lang.InterruptedException异常,不会中断线程。
(3).Thread.sleep(100); 执行之后再执行
Thread.currentThread().interrupt(); 不会报异常,且会中断线程。
class ThreadDemo01 {
public static void main(String[] args) {
TB tb = new TB();
tb.start();
try {
tb.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
int i = 0;
while ((i++) < 10) {
System.out.println("-------");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class TB extends Thread {
public void run() {
super.run();
int i = 0;
while (!Thread.currentThread().isInterrupted() && (i++) < 20) {
System.out.println("---->B");
//if(i == 10) Thread.currentThread().interrupt();//在sleep之前调用,将不能终止线程
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 10)
Thread.currentThread().interrupt();//在sleep之后调用,将能终止线程
}
}
}
yield()
屈服,让步
setDaemon(true)
tb.setDaemon(true); 设置守护线程
守护线程的用途就是为其他线程提供服务。当被服务者死亡后,其也就没有存在的价值,也就跟着去死了。
class DeamonDemo02 {
public static void main(String[] args) {
TB tb = new TB();
tb.setDaemon(true);//设置为守护线程
tb.start();
int i = 0;
while ((i++) < 10) {
try {
Thread.sleep(200);
System.out.println(i);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
class TB extends Thread {
public void run() {
super.run();
int i = 0;
while (!Thread.currentThread().isInterrupted() && (i++) < 20) {
System.out.println("---->B");
//if(i == 10) Thread.currentThread().interrupt();//在sleep之前调用,将不能终止线程
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 10)
Thread.currentThread().interrupt();//在sleep之后调用,将能终止线程
}
}
}
分享到:
相关推荐
E05_多线程复习.pdf
此资源有利于初学者巩固C#多线程的基础知识,内有80道练习题及答案。
Java多线程复习笔记,包括线程创建,关键字讲解,线程池等等。
多线程、JVM复习及面试100题 多线程、JVM复习及面试100题 多线程、JVM复习及面试100题 多线程、JVM复习及面试100题
C# WinForm多线程开发复习进程.pdf
适合复习多线程
多线程、JVM复习&面试&强化训练100题,面试更有信心,面试不再发愁。多线程、JVM复习&面试&强化训练100题,面试更有信心,面试不再发愁。
01大数据面试复习----Java基础---集合类、多线程、JVM.zip
计算机后端-Java-Java核心基础-第20章 多线程 02. 复习:IDEA使用与多线程基本概念.avi
此次实训不同,在些之前我作了一些准备,对多线程复习了好几编,实训果然派上用场。 通过这次JAVA飞机游戏实训,我对JAVA有了更深刻的认识, 对面向对象,和游戏中必然用到的多线程有了更深理解。实训中,我觉得最...
429.427.JAVA基础教程_多线程-复习:线程的创建与常用方法(429).rar
在虚拟机上用消息队列实现对话(双线程收发),即A<->B; 同时又可以复习多线程和信号捕捉
内容概要:最新2023年Java高并发多线程后端面试题整理, 包含线程池,并发集合,volatile,CountDownLatch,Semaphore,Phaser,AQS,ReentrantLock,ReentrantLock等等问题, 用简洁明了的语言,通俗易懂地阐述了高...
深入了解Java多线程,对Java的复习有了一定的提供基础
java多线程编程总结,超级细致与权威,我看过的最好的理解多线程知识点的复习资料
计算机后端-Java-Java核心基础-第20章 多线程 03. 复习:线程的创建与常用方法.avi
1.委托与多线程2.线程池 Socket 3.聊天程序 模拟IIS 4.一般处理程序 11.异步无刷新分页复习+服务器端控件
多线程生产者与消费者,,生产者和消费者的解答网络上有多种线程版本,但却没看到进程版本,所以我就来填补这一“空白”了。PS:使用进程版本的另一个重要原因是,想顺便复习下共享内存。 我们使用信号量来同步,用...
学jav到最后简单的学习汇总 多线程 流 的复习
Java应用程序设计之多线程和泛型 Thread、Runnable、Callable 线程操作:isAlive()、isInterrupted()、join()、sleep()、stop()、interrupted()、setDaemon()、setPriority()、yield() 同步与死锁、Object类对线程的...