java笔记--线程的插队行为

对线程的插队行为的理解

在编写多线程时,会遇到让一个线程优先于其他线程运行的情况,
此时除了可以设置其优先级高于其他线程外,更直接的方式是使用Thread类的join()方法

--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3893797.html"谢谢--

使用join()方法,可实现"插队"效果。当插队的线程运行结束后,其他线程将继续执行。
join()方法是Thread类的一个静态方法,它有三种形式:

join() : 等待调用该方法的线程终止
join(long millis) : 等待调用该方法的线程终止的时间最长为millis毫秒
join(long millis,int nanos) : 等待调用该方法的线程终止的时间最长为millis毫秒加纳秒

注:如果有线程中断了运行join()方法的线程,则抛出InterruptedException

代码实例:

package com.xhj.thread;

/**
* 用join()来实现线程的插队
*
* @author XIEHEJUN
*
*/
public class JoinThread implements Runnable {

@Override
public void run() {
for (int i = 1; i < 6; i++) {
try {
Thread.sleep(100);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("紧急情况:" + i + "号车出发");
}

}

public static void main(String[] args) {
JoinThread join = new JoinThread();
Thread thread = new Thread(join);
thread.start();
for (int i = 1; i < 6; i++) {
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("正常情况下:" + i + "号车出发");
try {
thread.join();
} catch (Exception e) {
e.printStackTrace();
}
}

}

}

java笔记--线程的插队行为

时间: 2024-10-11 11:39:18

java笔记--线程的插队行为的相关文章

11.4-全栈Java笔记:线程三种状态的控制

关于Java线程终止.暂停.联合的文章网上有很多,经过测试,本节重点讲解的是针对不同使用场景选择合适的方法. 终止线程的典型方式 终止线程我们一般不使用JDK提供的stop()/destroy()方法(他们本身也被JDK废弃了).通常的做法是提供一个boolean型的终止变量,当这个变量置为false,则终止线程的运行. [示例1]终止线程的典型方法(重要!!!) public class TestThreadCiycle implements   Runnable { String name;

11.9-全栈Java笔记: 线程并发协作(生产者/消费者模式)

多线程环境下,我们经常需要多个线程的并发和协作.这个时候,就需要了解一个重要的多线程并发协作模型"生产者消费者模式". 什么是生产者? 生产者指的是负责生产数据的模块(这里模块可能是:方法.对象.线程.进程). 什么是消费者? 消费者指的是负责处理数据的模块(这里模块可能是:方法.对象.线程.进程). 什么是缓冲区? 消费者不能直接使用生产者的数据,它们之间有个"缓冲区".生产者将生产好的数据放入"缓冲区",消费者从"缓冲区"

11.3-全栈Java笔记:线程的生命周期

一个线程对象在它的生命周期内,需要经历5个状态. 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态. 就绪状态(Runnable) 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于 "线程就绪队列",等待系统为其分配CPU. 就绪状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会进入执行状态. 一旦获得CPU,线程就进入运行状态并自动调用自己的run

11.11-全栈Java笔记:线程状态转换和任务定时调度

线程状态转换 1)New :创建好线程对象,但没有启动的时候. 一个线程调用start()之后不一定会马上启动,此时进入就绪状态,等待得到资源. 2)就绪线程序通过Scheduler(调度程序)去确定是否运行. 3)Runing---dead:运行结束(非双向,为单向箭头). 4)Runing---就绪:暂停(除了没有CPU,具备运行的所有条件). 5)Runing-otherwise(阻塞):因程序原因:调用sleep或join之后,线程被阻塞.这时不具备运行的条件,此时线程进入阻塞池.sle

11.5-全栈Java笔记:线程基本信息和优先级别

获取线程基本信息的方法 表  线程的常用方法 方法 功能 isAlive() 判断线程是否还"活"着,即线程是否还未终止. getPriority() 获得线程的优先级数值 setPriority() 设置线程的优先级数值 setName() 给线程一个名字 getName() 取得线程的名字 currentThread() 取得当前正在运行的线程对象,也就是取得自己本身 [示例1]线程的常用方法举例一 public class ThreadTest3 { public static 

Java笔记 - 线程基础知识

前言 进程是一个执行中程序的实例,是操作系统进行资源分配和调度的一个独立单元.线程是进程中一个单一的程序控制流,是 CPU 调度和分派的基本单元.进程在执行时拥有独立的内存空间,进程中的线程可以共享进程的内存空间.在 Java 的世界中,进程可以拥有多个并发执行的线程,多线程是实现并发任务的方式. 线程创建和启动 1. 实现 java.lang.Runnable 接口 定义线程执行的任务,需要实现 Runnable 接口并编写 run 方法. public interface Runnable

java笔记线程两种方式模拟电影院卖票

1 public class SellTicketDemo { 2 public static void main(String[] args) { 3 // 创建三个线程对象 4 SellTicket st1 = new SellTicket(); 5 SellTicket st2 = new SellTicket(); 6 SellTicket st3 = new SellTicket(); 7 8 // 给线程对象起名字 9 st1.setName("窗口1"); 10 st2.

java笔记线程方式1优先级

* 我们的线程没有设置优先级,肯定有默认优先级. * 那么,默认优先级是多少呢? * 如何获取线程对象的优先级? *   public final int getPriority():返回线程对象的优先级 * 如何设置线程对象的优先级呢? *   public final void setPriority(int newPriority):更改线程的优先级.  *  * 注意: *   线程默认优先级是5.  *   线程优先级的范围是:1-10. *   线程优先级高仅仅表示线程获取的 CPU

java笔记线程方式1等待终止

public final void join():等待该线程终止 public class ThreadJoinDemo { public static void main(String[] args) { ThreadJoin tj1 = new ThreadJoin(); ThreadJoin tj2 = new ThreadJoin(); ThreadJoin tj3 = new ThreadJoin(); tj1.setName("李渊"); tj2.setName("