Java核心技术 卷1 多线程

<1>什么是线程

  一个程序同时执行多个任务,每个任务称为一个线程(thread),它是线程控制的简称。可以同时运行一个以上线程的程序称为多线程程序(nultithreaded)。

<2>多进程与多线程有哪些区别

  本质的区别在于每个进程拥有自己的一整套变量,而线程共享数据。共享变量使线程之间的通信比进程之间的通信更有效、更容易。

Thread方法

  • void interrupt()

  向线程发送中断请求。线程的中断状态将被设置为true.如果目前该线程被一个sleep调用阻塞,那么,InterruptedException异常被抛出。

  • static bollean interrupted()

  测试当前线程(即正在执行这一命令的线程)是否被 中断。注意,这是一个静态方法。这一调用会产生副作用----它将当前线程的中断状态重置为false.

  • boolean inInterrupted()

  测试线程是否被终止。不像静态的中断方法,这一调用不改变线程的中断状态。

  • static Thread currentThread()  

  返回当前执行线程的Thread对象

  <3>线程的状态 (6种)

  • New(新创建)

   当用new操作符创建一个新线程时,如new Thread(r),该线程还没有开始运行。这意味着它的状态是new.

  • Runnable(可运行)

   一旦调用start方法,线程处于runnable状态。一个可运行的线程可能正在运行也可能没有运行,这取决于操作系统给线程提供运行的时间。(一个可运行的线程可能正在运行也可能没有运行)

  • Blocked(被阻塞)
  • Waiting(等待)

   当线程处于被阻塞或等待状态时,它暂时不活动。它不运行任何代码且消耗最少的资源。直到线程调试器重新激活它。

  (1)当一个线程试图获取一个内部的对象锁,而该锁被其它线程持有,则该线程进入阻塞状态。当所有其它线程释放该锁,并且线程调度器允许本线程持有它的时候,该线程将变成非阻塞状态。

  (2)当线程等待另一个线程通知调度器一个条件时,它自己进入等待状态。在调用Object.wait方法或Thread.join方法,或者是等待java.util.concurrent库中的Lock或Condition时,就会出现这种情况。

  • Timed waiting(计时等待)

  有几个方法有一个超时参数。调用它们导致线程进入计时等待(time waiting)状态。这一状态将一直保持到超时期满或者接收到适当的通知。带有超时参数的方法有Thread.sleep和Object.wait、Thread.join、Lock.tryLock以及Condition.await的计时版。

  • Terminated(被终止)

  线程因如下两个原因之一而被终止:

  (1)因为run方法正常退出而自然死亡。

  (2)因为一个没有捕获的异常终止了run方法而意外死亡。

Java.lang.Thread

  • void join()

  等待终止指定的线程

  • void join(long millis)

  等待指定线程死亡或者经过指定的毫秒数。

  • Thread.State getState()

  得到这一线程的状态;New、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING或TERMINATED之一。

  • void stop()

  停止该线程。(过时)

  • void suspend()

  暂停这一线程的执行(过时)

  • void resume()

  恢复线程。这一方法仅仅在调用suspend()之后调用。(过时)

时间: 2024-10-20 21:56:26

Java核心技术 卷1 多线程的相关文章

Java核心技术 卷1 多线程----线程安全的集合(4)

如果多线程要并发的修改一个数据结构,例如散列表,那么很容易会破坏这个数据结构.一个线程可能要开始向表中插入一个新元素.假定在调整散列表各个桶之间的链接关系的过程中,被剥夺了控制权.如果另一个线程也开始遍历同一个链表,可能使用无效的链接并造成混乱,会抛出异常或者陷入死循环. 可以通过提供锁来保护共享数据结构,但是选择线程安全的实现作为替代可能更容易些.上一篇讨论的阻塞队列就是线程安全的集合.接下来讨论java类库提供的另外一些线程安全的集合. 高效的映射表.集合和队列 java.util.conc

[基础] 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核心技术卷I》观赏指南

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

《Java核心技术 卷1 基础知识》一

<java核心技术卷1 第1-3章> JDK Java Development Kit ,即Java开发工具包 但这个工具包的1.2-1.4版本被称为Java SDK,随后才改名为JDK JRE Java运行时环境,它包含虚拟机但不包括编译器 Java SE,Java Standard Edition,Java标准版本 Java EE,Java Enterprise Edition,Java企业版本 Java ME,Java Micro Edition,Java微观版本 Java2 这种提法始

Java核心技术 卷1 读书笔记 (3 Java基本程序设计结构)

3.3 数据类型 Java是强类型语言,必须为每一个变量声明一种类型. 3.3.1 整型 Java 提供四种整型 int 4字节 short 2字节 long 8字节 byte 1字节 长整型(long)数值有一个后缀L(例如40000000000L),十六进制数值有一个前缀0x(例如0xCAFE),八进制数值有一个前缀0(例如010). 3.3.2 浮点型 Java提供两种浮点类型 float 4字节 double 8字节 float类型的数值有一个后缀F(例如3.42F),没有后缀F的浮点数

《Java核心技术 卷II 高级特性 原书第10版》高清pdf

<Java核心技术 卷II 高级特性 原书第10版> 本书是Java领域有影响力和价值的著作之一,由拥有20多年教学与研究经验的Java技术专家撰写(获Jolt大奖),与<Java编程思想>齐名,10余年全球畅销不衰,广受好评.第10版根据JavaSE8全面更新,同时修正了第9版中的不足,系统全面讲解了Java语言的核心概念.语法.重要特性和开发方法,包含大量案例,实践性强. ? 百度网盘链接: https://pan.baidu.com/s/1aZ9KUgxwHNQJMH6X7h

JAVA核心技术 卷II:高级特性(原书第8版)下载 &#363916;

下载地址: http://www.gqylpy.com/di/12 <JAVA核心技术 卷II:高级特性>PDF高清完整版-下载 前言致读者本书是按照Java?SE?8完全更新后的<Java核心技术??卷Ⅱ??高级特性(原书第10版)>.卷Ⅰ主要介绍了Java语言的一些关键特性:而本卷主要介绍编程人员进行专业软件开发时需要了解的高级主题.因此,与本书卷Ⅰ和之前的版本一样,我们仍将本书定位于用Java技术进行实际项目开发的编程人员.????编写任何一本书籍都难免会有一些错误或不准确的

《java核心技术 卷1 基础知识》二

<Java核心技术 卷1 基础知识>第4-5章 在Java中没有类就无法做任何事情 new操作符的返回值是一个引用 在Java中,如果使用一个未初始化的指针,运行系统会产生一个运行时错误. Date 用来表示时间点 LocalDate 日历表示法 同时不推荐使用Date类来处理日历 推荐使用LocalDate来处理日历 每一个拥有名字的类都会被编译生成对应的class文件 所有的Java对象都是在堆中构造的,构造器总是随着new操作符一起使用 在Java中,所有的方法都必须在类的内部定义,但并

《Java核心技术 卷1 基础知识》三

<Java核心技术 卷1 基础知识> 第六章 接口和内部类 接口不是类,而是对类的的一组需求描述. 接口不能包含实例域--接口没有实例 可以将接口看作没有实例域的抽象类 要将类声明为实现某个接口,需要使用关键字implements. 类实现一个接口的具体步骤为: 1)使用implements关键字进行声明要实现的接口 2)对接口中的所有方法进行定义 接口中的所有方法默认为public 但在实现接口时需要声明为public 这里介绍了Comparable接口,该接口只有一个方法,compareT