Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记
第一章 Thread导论
为何要用Thread ?
第二章 Thread的创建与管理
一、什么是Thread ?
public class Factorial {
public static void main(String[] args) {
int n = 5;
System.out.print(n + "! is ");
int fact = 1;
while (n > 1) {
fact *= n--;
}
System.out.println(fact);
}
// 代码的运行步骤是右上至下
// Java的入口是Main方法
}
二、创建Thread
Thread()
分配新的 Thread 对象。 Thread(Runnable target)
分配新的 Thread 对象。 Thread(Runnable target, String name)
分配新的 Thread 对象。 Thread(String name)
分配新的 Thread 对象。
Thread(ThreadGroup group, Runnable target)
分配新的 Thread 对象。
Thread(ThreadGroup group, Runnable target, String name)
分配新的 Thread 对象。以便将 target 作为其执行对象。将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。 Thread(ThreadGroup group, Runnable target, String name, long stackSize)
分配新的 Thread 对象,以便将 target 作为其执行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。 Thread(ThreadGroup group, String name)
分配新的 Thread 对象。
三、Thread的生命周期
class ThreadClass extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("Helo World! " + i);
}
}
}
public class CreateThread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("Helo World! " + i);
}
}
public static void main(String[] args) {
CreateThread ourClass = new CreateThread();
ourClass.run();
ThreadClass threadClass = new ThreadClass();
threadClass.start();
}
}
但线程都是线性从前往后运行的。
假设该线程是使用独立的 Runnable 执行对象构造的。则调用该 Runnable 对象的 run 方法;否则,该方法不执行不论什么操作并返回。
Thread 的子类应该重写该方法。
已过时。强迫线程停止运行。
在指定的毫秒数内让当前正在运行的线程休眠(暂停运行),此操作受到系统计时器和调度程序精度和准确性的影响。
该线程不丢失不论什么监视器的所属权。
在指定的毫秒数加指定的纳秒数内让当前正在运行的线程休眠(暂停运行),此操作受到系统计时器和调度程序精度和准确性的影响。
该线程不丢失不论什么监视器的所属权。
等待该线程终止的时间最长为 millis 毫秒。超时为 0 意味着要一直等下去。
public final void join(long millis, int nanos) throws InterruptedException
public final void join() throws InterruptedException
四、两种停止Thread的方式
public class RandomCharacterGenerator extends Thread {
private volatile boolean done = false;
@Override
public void run() {
// ...
while (!done) {
// ...
}
// ...
}
public void setDone() {
done = true;
}
}
class InterruptedThread extends Thread {
@Override
public void run() {
if (!isInterrupted()) {
//
}
}
}
測试线程是否已经中断。线程的中断状态 不受该方法的影响。
线程中断被忽略。由于在中断时不处于活动状态的线程将由此返回 false 的方法反映出来。
返回:
假设该线程已经中断,则返回 true;否则返回 false。
測试当前线程是否已经中断。线程的中断状态 由该方法清除。
换句话说,假设连续两次调用该方法,则第二次调用将返回false(在第一次调用已清除了当中断状态之后。且第二次调用检验完中断状态前,当前线程再次中断的情况除外)。
线程中断被忽略,由于在中断时不处于活动状态的线程将由此返回 false 的方法反映出来。
返回:
假设当前线程已经中断,则返回 true;否则返回 false。
五、Runnable Interface
public class OurClass {
public static void main(String[] args) {
RunnableClass ourRunnableClass = new RunnableClass();
Thread thread = new Thread(ourRunnableClass);
thread.start();
}
}
class RunnableClass implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("Helo World! " + i);
}
}
}
六、Thread与对象
返回对当前正在运行的线程对象的引用。
測试线程是否处于活动状态。
假设线程已经启动且尚未终止,则为活动状态。
改变线程名称,使之与參数 name 同样。
首先调用线程的 checkAccess 方法,且不带不论什么參数。这可能抛出 SecurityException。
public final String getName()
返回该线程的名称。
public Thread(String name)
分配新的 Thread 对象。这样的构造方法与 Thread(null, null, name) 具有同样的作用。
public Thread(ThreadGroup group, String name)
分配新的 Thread 对象。这样的构造方法与 Thread(group, null, name) 具有同样的作用。
Java 线程第三版 第一章Thread导论、 第二章Thread的创建与管理读书笔记的更多相关文章
- Java 螺纹第三版 第一章Thread介绍、 第二章Thread创建和管理学习笔记
第一章 Thread导论 为何要用Thread ? 非堵塞I/O I/O多路技术 轮询(polling) 信号 警告(Alarm)和定时器(Timer) 独立的任务(Ta ...
- Java 线程第三版 第四章 Thread Notification 读书笔记
一.等待与通知 public final void wait() throws InterruptedException 等待条件的发生. public final void wait(lo ...
- Java 线程第三版 第五章 极简同步技巧 读书笔记
一.能避免同步吗? 取得锁会由于下面原因导致成本非常高: 取得由竞争的锁须要在虚拟机的层面上执行很多其它的程序代码. 要取得有竞争锁的线程总是必须等到锁被释放后. 1. 寄存器的效应 ...
- Java 线程第三版 第九章 Thread调度 读书笔记
一.Thread调度的概述 import java.util.*; import java.text.*; public class Task implements Runnable { long n ...
- Java 线程第三版 第八章 Thread与Collection Class 读书笔记
JDK1.2引入最有争议性的改变是将集合类默觉得不是Thread安全性的. 一.Collection Class的概述 1. 具有Threadsafe 的Collection Class: j ...
- 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题
调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...
- 疯狂java讲义 第三版 笔记
java7新加特性: 0B010101 二进制数 int c=0B0111_1111; 数值中使用下划线分隔 switch 支持String类型 字符串常量放在常量池 String s0 ...
- 计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具
计算机图形学 opengl版本 第三版------胡事民 第四章 图形学中的向量工具 一 基础 1:向量分析和变换 两个工具 可以设计出各种几何对象 点和向量基于坐标系定义 拇指指向z轴正 ...
- 深入理解Java虚拟机第三版,总结笔记【随时更新】
最近一直在看<深入理解Java虚拟机>第三版,无意中发现了第三版是最近才发行的,听说讲解的JDK版本升级,新增了近50%的内容. 这种神书,看懂了,看进去了,真的看的很快,并没有想象中的晦 ...
随机推荐
- Apple 公司开发者账号注册
苹果公司开发者账号注册流程详解 这段时间在给朋友申请苹果账号,从个人开发者账号.公司账号到企业账号,申请了个遍.这里对申请流程做一下介绍,方便其他朋友,少走弯路,账号早日申请通过. 1.首先介绍下 ...
- php常用函数集
网络请求: /** * 发起HTTPS请求 */ function curl_post($url,$data=null,$header=null,$post=0) { //初始化curl $ch = ...
- using namespace std
using namespace std std 是一个命名空间..不同的命名空间可以有相同的类名被定义 ..using namespace std;就是指明下面的程序使用std,如果不用这句指明的话就 ...
- NOI冲刺计划
省选过了,剩下大概是NOI冲刺了吧.中间还有一大堆诸如会考,CTSC,APIO等东西. 最近先不急着天天刷八中了吧,多在不同网站见一些题,然后再着重提高一下代码准确性.重点把DP这个板块多练习一下,八 ...
- Session里的对象是不可靠的!
最近在做Database课程的final project,foodiePharos, 重新认识了JSP里容易出现的一些问题. 比如我们这个项目使用了JPA,就涉及到entity对象的状态问题,Enti ...
- 一周一话题之四(JavaScript、Dom、jQuery全面复习总结<js篇>)
-->目录导航 一. JavaScript 1. js介绍 2. js语法 3. js进阶 4. js高级 5. 事例代码下载 一. JavaScript 做BS系统,JavaScript的使用 ...
- 禁止form表单回车键进行提交
使用EasyUI的时候,我们会给一个datagrid添加一个搜索栏,但是这个搜索栏的form,我们一般使用ajax向服务器提交数据,因此在这样一个环境下可以考虑禁止用户按回车键(Enter)提交.代码 ...
- 创建支持CRUD(增删改查)操作的Web API(二)
一:准备工作 你可以直接下载源码查看 Download the completed project. 下载完整的项目 CRUD是指“创建(C).读取(R).更新(U)和删除(D)”,它们是四个 ...
- Apache benchmark 压力测试工具
ab 的全称是 ApacheBench , 是 Apache 附带的一个小工具 , 专门用于 HTTP Server 的 benchmark testing , 可以同时模拟多个并发请求. 安装apa ...
- 【HDOJ】3436 Queue-jumpers
离散化+伸展树. /* 3436 */ #include <iostream> #include <string> #include <map> #include ...