《Java核心技术》---- 多线程

API:

java.lang.Thread

  • static void sleep(long millis) 休眠给定的毫秒数。
  • Thread(Runnable target) 构造一个新线程,用于调用给定target的run()方法。
  • void start() 启动这个线程,将引发调用run()方法。这个方法将立即返回,并且新线程将并行运行。
  • void run()调用关联Runnable的run方法。
  • void interrupt() 向线程发送中断请求。线程的中断状态将被设置为true。如果目前该线程被一个sleep调用阻塞,那么, InterruptedException异常被抛出。
  • static boolean interrupted() 测试当前线程(即正在执行这一命令的线程)是否被中断。这是一个静态方法。这一调用会产生副作用,它将当前的中断状态重置为false.
  • boolean isInterrupted() 测试线程是否被终止。不像静态的中断方法,这一调用不改变线程的中断状态。
  • static Thread currentThread() 返回代表当前执行线程的Thread对象。

java.lang.Runnable

  • void run() 必须覆盖这个方法,并在这个方法中提供所要执行的任务指令。

一,中断线程

  可以调用interrupt()方法发送中断请求。但是,如果线程被阻塞,就无法检测中断状态。这是产生InterruptedException异常的地方。当在一个被阻赛的线程(调用sleep或wait)上调用interrupt方法时,阻塞调用将会被InterruptedException中断。

发出中断请求并不意味着线程立即会终止,发送请求只是要引起线程注意,要求中断的线程可以决定如何处理这个中断请求。某些线程会处理完异常后,继续执行,而不理会中断。但是更普遍的情况是,线程将简单地将中断作为一个终止的请求。即如下代码:

public void run() {
    try {
        ...
        while(!Thread.currentThread().isInterrupted() && more work to check) {
            do more work;
        }
    } catch (InterruptedException ex) {
        // Thread was interrupted during sleep or wait;
    } finally {
        //cleanup, if required;
    }
    // exiting the run method terminates the thread
}

如果在线程调用sleep方法后,isInterrupted检测没有必要也没用。如果在中断状态调用sleep方法,它也不会休眠。相反,它将清除这一状态并抛出InterruptedException。

二,线程状态

  • New(新创建)
  • Runnable(可运行)
  • Blocked(被阻塞)
  • Waiting(等待)
  • Timed waiting(计时等待)
  • Terminated(被终止)

1,新创建线程

  new Thread(r), 当一个线程处于新建状态时,程序还没有开始运行线程中的代码。

2,可运行线程

  一旦调用start方法,线程处于runnable状态。一个可运行的线程可能正在运行也可能没有运行。

一旦一个线程开始运行,它不必始终保持运行。抢占式调度系统给每一个可运行线程一个时间片来执行任务,当时间片用完,操作系统剥夺该线程的运行权,并给另一个线程运行机会。

3,被阻塞线程和等待线程

  当线程处于被阻塞或等待状态时,它暂时不活动。

  进入被阻塞或等待状态的情况:

  •   当一个线程试图获取一个内部的对象锁,而该锁被其他线程持有,则该线程进入阻塞状态。当所有其他线程释放该锁,并且线程调度器允许该线程持有这把锁时,该线程将变成非阻塞状态。
  • When the thread waits for another thread to notify the scheduler of a condition, it enters the waiting state.
  •   有一些方法有一个超时参数,调用它们导致线程进入计时等待状态。这一状态将一直保持到超时期满或者接收到适当的通知。这些方法有:Thread.sleep(), Object.wait(), Thread.join(), Lock.tryLock以及Condition.await()

时间: 2024-10-20 04:19:57

《Java核心技术》---- 多线程的相关文章

java核心技术-多线程基础

进程.线程 ? 进程(Process) 是程序的运行实例.例如,一个运行的 Eclipse 就是一个进程.进程是程序向操作系统申请资源(如内存空间和文件句柄)的基本单位.线程(Thread)是进程中可独立执行的最小单位.一个进程可以包含多个线程.进程和线程的关系,好比一个营业中的饭店与其正在工作的员工之间的关系. 1.1 线程的创建.启动与运行 在 Java 中实现多线程主要用两种手段,一种是继承 Thread 类,另一种就是实现 Runnable 接口.(当然还有Callable和线程池).下

java核心技术-多线程之线程基础

说起线程,无法免俗首先要弄清楚的三个概念就是:进程.线程.协程.OK,那什么是进程,什么是线程,哪协程又是啥东西.进程:进程可以简单的理解为运行在操作系统中的程序,程序时静态代码,进程是动态运行着的代码,程序的运行需要向操作系统申请资源比如内存,文件句柄等,特别强调的是进程申请的资源都是独立的,也就是进程与进程之间资源是独立的.它被操作系统调度,所以进程是相对于操作系统的:线程:线程是进程中程序执行任务的那个,它共享着进程申请的资源:协程:可以简单的说是线程制造的轻量线程.讲完了基本的概念看看三

《Java核心技术 卷1 基础知识 原书第9版》pdf

下载地址:网盘下载 内容简介 编辑 CayS.Horstmann等编著,公飞编译的<Java核心技术>(CoreJava)自第1版出版以来,一直备受广大Java程序设计人员的青睐,畅销不衰,是Java经典书籍.第8版针对JavaSE6平台进行了全面更新,囊括了Java平台标准版(JavaSE/J2SE)的全部基础知识,提供了大量完整且具有实际意义的应用实例,详细介绍了Java语言基础知识.面向对象程序设计.接口与内部类.事件监听器模型.swing图形用户界面程序设计.打包应用程序.异常处理.登

java核心技术学习笔记之一程序设计概述

Java 核心技术之一程序设计概述 一.   Java语言的特点 简单行 :取经于C++,排除了C++不常用的指针.结构等,增加垃圾回收. 面向对象:与C++不同是单继承,但是可以继承多接口.完全面向对象的语言: 网络技能:Socket,FTP,Http,URL编程简单: 健壮性:避免指针错误使用: 安全性:构建防病毒防篡改系统: 体系结构中立:字节码: 可移植性: 解释性:可以解释任何移植了的字节码: 高性能: 多线程 动态性: 二.   Internet 和 Java Applet 在网页中

[基础] Java目录(摘自Java核心技术·卷1 基础知识)

Java核心技术·卷1 基础知识(原书第9版) 第1章 Java程序设计概述 1.1 Java程序设计平台 1.2 Java"白皮书"的关键术语 1.2.1 简单性 1.2.2 面向对象 1.2.3 网络技能 1.2.4 健壮性 1.2.5 安全性 1.2.6 体系结构中立 1.2.7 可移植性 1.2.8 解释型 1.2.9 高性能 1.2.10 多线程 1.2.11 动态性 1.3 Java applet与Internet 1.4 Java发展简史 1.5 关于Java的常见误解

深入理解Java之多线程

一.为什么使用多线程 1. 并发与并行 我们知道,在单核机器上,“多进程”并不是真正的多个进程在同时执行,而是通过CPU时间分片,操作系统快速在进程间切换而模拟出来的多进程.我们通常把这种情况成为并发,也就是多个进程的运行行为是“一并发生”的,但不是同时执行的,因为CPU核数的限制(PC和通用寄存器只有一套,严格来说在同一时刻只能存在一个进程的上下文). 现在,我们使用的计算机基本上都搭载了多核CPU,这时,我们能真正的实现多个进程并行执行,这种情况叫做并行,因为多个进程是真正“一并执行”的(具

读《java核心技术卷一》有感

过去一个多月了吧.才囫囵吞枣地把这书过了一遍.话说这书也够长的,一共706页.我从来不是个喜欢记录的人,一直以来看什么书都是看完了就扔一边去,可能有时候有那么一点想记录下来的冲动,但算算时间太紧,很多也是有始无终,毕竟在之前研究研究程序也只是自己的一个爱好而已,但没有想到签了一个程序员的工作.唉,这老天也太捉弄人了吧,让一个学电气工程(强电方向)学生毕业之后去写代码,而且是与硬件完全无关的代码.真是白念几年大学了.行了,就行发这么多牢骚吧. <java核心技术>有两个卷,我只看了卷一,从我的感

java核心技术卷一

java核心技术卷一 java基础类型 整型 数据类型 字节数 取值范围 int 4 +_2^4*8-1 short 2 +_2^2*8-1 long 8 +_2^8*8-1 byte 1 -128-127       浮点类型 数据类型 字节数 取值范围 小数位数 float 4 10^-38~10^38和-10^-38~-10^38 小数位数6-7 double 4 10^-308~10^308和-10^-308~-10^308 15位小数         boolean 类型和char 类

【Java】多线程初探

 参考书籍:<Java核心技术 卷Ⅰ > Java的线程状态 从操作系统的角度看,线程有5种状态:创建, 就绪, 运行, 阻塞, 终止(结束).如下图所示 而Java定义的线程状态有: 创建(New), 可运行(Runnable), 阻塞(Blocked), 等待(Waiting), 计时等待(Time waiting) 被终止(Terminated). 那么相比起操作系统的线程状态, Java定义的线程状态该如何解读呢? 如下: 1. Java的阻塞. 等待. 计时等待都属于操作系统中定义的

《Java核心技术卷I》观赏指南

Tomxin7 如果你有想看书的计划,但是还在纠结哪些书值得看,可以简单看看"观赏指南"系列,本文会简单列出书中内容,给还没有买书的朋友提供一个参考. 前言 秋招过去很久了,虽然在学校的时候有恶补java基础,但是都是为了面试而准备的,有些技术并没有进行全面的了解,再加上java现在疯狂的更新版本,很多新东西没有了解过,所以就打算再过一遍.java的书籍很多,也不想重复的看,所以就买了两本写的比较系统的<java核心技术卷I II>,本篇文章主要是想分享一下卷I,如果你正打