1. 一些方法
sleep():
sleep()方法能迫使线程休眠指定长的时间。在调用sleep()方法的时候,必须把它放在try块中,因为在休眠时间到期之前有可能被打断。如果某人持有对此线程的引用,并且在此线程上调用了interrupt()方法,就会发生这种情况。
daemon线程:
必须在线程启动之前调用setDaemon()方法,才能把它设置为后台线程。一个后台线程所创建的任何线程都将被自动设置成后台线程,主线程退出以后,守护线程随后也会慢慢退出
join():
一个线程可以在其他线程之上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行。如果某个线程在另一个线程t上调用t.join(),此线程将被挂起,直到目标线程t结束才恢复(即t.isAlive()返回为false)
你也可以在调用join()时带上一个超时参数(单位可以是毫秒或者毫秒+纳秒),这样如果目标线程在这段时间到期还没结束的话,join()方法总能返回。
对join()方法的调用可以被中断,做法是在调用线程上使用interrupt()方法,这时需要用到try-catch
isAlive():
如果该线程是可运行线程或被中断的线程,那么该方法返回true;如果该线程仍然是个新线程或尚未成为可运行线程,或者该线程是个死线程,那么该方法返回false
注:无法确定一个“活”线程究竟是处于可运行状态还是被中断状态,也无法确定一个运行线程释放正处在运行之中。另外,你也无法对尚未成为可运行的线程与已经死掉的线程进行区分。
2. 线程的四种状态:创建、就绪、死亡、阻塞。
线程进入阻塞状态可能有如下四种原因:
通过调用sleep()使线程进入休眠状态。在这种情况下,线程在指定时间内不会运行
通过调用wait()使线程挂起,直到线程得到了notify()或notifyAll()消息,线程才会进入就绪状态
线程在等待输入/输出操作的完成
线程试图在某个对象上调用其同步控制方法,但是对象锁不可用
3. 只有当下列四个条件同时满足时,才会发生死锁:
互斥条件:线程使用的资源中至少又一个是不能共享的
至少有一个进程持有一个资源,并且他在等待获取一个当前被别的进程持有的资源。
资源不能被进程抢占。所有的进程必须把资源释放作为普通事件。
必须有循环等待,即,一个线程等待其他线程持有的资源,后者又在等待另一个进程持有的资源,这样一直下去,直到又一个进程在等待第一个进程持有的资源,使得大家都被锁住。
要发生死锁,必须这四个条件同时满足,所以,只要破坏其中任意一个,就可以打破死锁。其中第四个条件是最容易被打破的。
4. 线程的优先级
JVM将线程的优先级映射为主机平台的优先级等级。
每当主机平台使用的优先级低于Java平台时,某个线程的运行就可能被另一个优先级明显低得多的线程线程抢先。这意味着你不能依靠多线程程序中的优先级等级。
另外,调用yield方法,只会让当前线程暂时放弃运行,而主机则始终准备对放弃运行的线程实施重新启动。如果当前线程优先级较高,则可能主机一直重启该线程,而其他低优先级线程将得不到运行。为此,yield也靠不住,sleep可能是更好的方式。
5. java中对以“管道”形式对线程的输入/输出提供了支持
PipedWriter类允许线程向管道写;PipedReader类允许不同线程从一个管道中读取。或是采用PipedInputStream和PipedOutputStream提供字节流支持
使用管道的主要原因是为了使每个线程始终能保持简单。可以将多个线程相互连接起来,而不必担心线程的同步问题。
但要注意,管道式数据流只适用于线程在低层次上的通信,在其他情况下,可以使用队列。
- 大小: 34.4 KB
分享到:
相关推荐
1. **线程定义** 在Java中,线程是进程中的单一顺序控制流,是程序执行的基本单元。线程在进程的上下文中运行,共享进程的内存空间和其他资源,但拥有自己独立的执行栈和程序计数器。这种轻量级的特性使得线程相比...
Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...
### Java线程基础 #### 一、操作系统中的线程与进程概念 在现代操作系统中,多线程是一种常见的实现多任务的方式。对于操作系统而言: - **进程**:指的是内存中运行的一个应用程序。每个进程拥有自己独立的一块...
### Java线程入门知识点详解 #### 一、Java线程基础知识概述 **1.1 什么是线程?** 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。在Java中...
Java线程是多任务编程中的核心概念,它允许程序同时执行多个不同的任务,极大地提高了程序的效率和响应性。在Java中,线程是通过Java.lang.Thread类或实现Runnable接口来创建和管理的。这份“java线程文档大全”包含...
Java线程与并发编程实践是Java开发者必备的技能之一,特别是在多核处理器和高并发应用环境中,有效地管理和利用线程能极大地提升程序的性能。本书《java线程与并发实践编程》由Jeff Friesen撰写,2017年2月出版,...
### Java线程使用教程知识点详解 #### 一、线程基础概述 - **定义与特点**:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。Java是首个在语言级别明确支持线程特性的...
在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)和死亡状态(Dead)。了解这些状态对于掌握Java多线程编程至关重要。 新建...
#### 一、Java线程:概念与原理 现代操作系统都是多任务操作系统,其中多线程是一种重要的实现多任务的方式。线程是进程内的一个执行单位,一个进程可以包含多个线程。例如,在Java应用程序中(如`java.exe`),...
本文将详细介绍 Java 线程状态转换图,包括初始状态、可运行状态、运行状态、阻塞状态、锁池状态、等待队列状态和终止状态七种状态的定义、特点和转换关系。 初始状态(Newborn) * 线程的实现有两种方式,一是...
Java线程是多任务编程的...深入学习Java线程,不仅需要理解以上基本概念,还要熟悉线程池的使用、死锁和活锁的预防、线程中断机制、线程安全类库如Concurrent包等。通过实际项目中的实践,才能更好地掌握Java线程编程。
#### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** 当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的应用程序,每个进程拥有...
- **线程定义**: 在计算机科学中,线程是指程序执行流的一个单元,是操作系统调度的基本单位。 - **线程与进程的区别**: - 进程: 是一个正在运行的应用程序的实例,具有独立的内存空间。 - 线程: 进程内的一个执行...
Java线程是Java编程中的重要概念,它允许程序同时执行多个任务,从而提高了程序的效率和响应性。在Java中,线程是程序执行的最小单位,由Java虚拟机(JVM)管理。本教程将深入讲解Java线程的基础知识,帮助你掌握多...
### Java线程学习知识点 #### 一、Java线程概览 - **定义与作用**:线程是在程序中独立且并发执行的路径。在Java中,线程被设计为语言的一部分,而不是作为操作系统的底层工具。每个Java程序至少包含一个主线程,在...
### Java线程详解:基础知识与应用实践 #### 线程概念解析 Java线程,作为Java编程语言中的一项核心特性,为实现并发处理提供了强大的工具。线程,本质上是程序执行流的最小单位,是一种轻量级的过程,是操作系统...
### Java线程详解 在Java开发中,线程(Thread)是执行程序的基本单位,它是一种轻量级的进程,可以实现并发操作,提高程序的运行效率。本篇内容将围绕Java线程的基础知识、创建方式、生命周期以及线程同步等核心...
Java线程安全是多线程编程中的一个关键概念,它涉及到多个线程访问共享资源时可能出现的问题。在Java中,线程安全问题通常与并发、内存模型和可见性有关。Java内存模型(JMM)定义了如何在多线程环境下共享数据的...
线程优先级是调度的重要依据,Java线程有三个基本优先级:`Thread.MIN_PRIORITY`(最低优先级)、`Thread.NORM_PRIORITY`(正常优先级)和`Thread.MAX_PRIORITY`(最高优先级),默认情况下所有新创建的线程都继承父线程的...
Java线程是并发编程的重要组成部分,它允许程序中有多个执行流同时运行,提高了程序的效率和响应性。在Java中,线程的创建主要有两种方式:继承`Thread`类和实现`Runnable`接口。 1. 继承`Thread`类: 当一个类...