第七章 多线程

7 多线程

7.1 进程和线程

1、进程

  • 进程是一个正在执行中的程序
  • 每一个进程都有一个执行顺序,该顺序是一个执行路径,或者叫做一个控制单元

2、线程

  • 线程就是进程中的一个独立控制单元
  • 线程在控制着进程的执行
  • 一个进程中至少有一线程

7.2 创建线程的方式

第一种:继承Thread类

步骤:

定义类继承Thread

复写Thread类中的run方法

调用线程的start方法,该方法的作用:启动线程,并调用run方法。

class Demo extends Thread{

public void run(){

System.out.println("demo run");

}

}

class ThreadDemo{

public static void main(String[] args){

Demo d = new Demo();//创建线程

d.start();

}

}

多线程的特点:随机性

多线程运行时,每一次运行的结果都不同。每个线程都在争夺CPU的执行权,谁得到谁就运行。在某一时刻,只能有一个程序运行(多核除外)。CPU在做着快速的切换,以达到同时运行的效果。

run方法用于存储线程要运行的代码

static Thread currentThread():获取当前线程对象

getName():获取线程名称

setName或者构造函数:设置线程名称

第二种:实现Runnable接口

步骤:

定义类实现Runnable接口

覆盖Runnable接口中的run方法

通过Thread类建立线程对象

将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数

调用Thread类的start方法开启线程,并调用Runnable接口子类额run方法

实现方式和继承方式的区别

  • 继承Thread:线程代码存放在Thread子类run方法中
  • 实现Runnable:线程代码存放在接口的子类额run方法中
  • 实现方法的好处:避免了单继承额局限性,在定义线程时,建议使用实现方式

class PrimeRun implements Runnable{

public void run(){

System.out.println("demo run");

}

}

class ThreadDemo{

public static void main(String[] args){

PrimeRun p = new PrimeRun();//创建线程

new Thread(p).start();

}

}

7.3 同步

1、同步的前提

  • 必须要有两个或者两个以上的线程
  • 必须是多个线程使用同一个锁
  • 必须保证同步中只有一个线程在运行

2、同步的好处和弊端

好处:解决了多线程额安全问题

弊端:多个线程都需要判断锁,比较消耗资源。

3、同步代码块

synchronized(对象){

需要被同步的代码

}

对象如同锁,持有锁的线程可以在同步中执行。没有持有锁的线程即使获取了CPU的执行权也进不去,因为没有获取锁。

4、同步函数

将synchronized作为函数的修饰符

public synchronized void add(){}

同步函数用的锁:

函数需要被对象调用,那么函数都有一个所属对象引用,就是this,所以同步函数使用的锁是this。

如果同步函数被静态修饰后,使用的锁是Class对象,类名.class。

死锁:同步嵌套

5、新特性:

jdk1.5之后提供了多线程升级解决方案

  • 将Synchronized替换成实现Lock操作,加锁:lock(),解锁:unlock()
  • 将Object中的wait、notify、notifyall替换成了Condition对象,该对象可通过Lock获取。等待:await(0,唤醒:signal()。

7.4 停止线程

stop方法已经过时。

只有一种方法停止线程:run方法结束。一般都将代码放在循环体中,所以只需要加个标记,控制循环,就可以让run方法结束。

特殊情况:

当线程处于等待状态,就读取不到标记,那么就不会结束。这是就需要使用Interrupt()方法,让等待状态 线程回到活动状态。

7.5 Join和yield

1、Join方法

  • 临时加入线程
  • 加入线程时,当前线程会进入等待状态,直到加入的线程运行完毕,再回到活动状态。

2、yield方法

暂停当前正在执行的线程,并执行其他线程。

7.6 优先级

优先级有1到10,所有线程默认都是5。通常只取1、5和10,为了便于阅读将这三个设为了常量,分别对应MIN_PRIORITY、NORM_PRIORITY、MAX_PRIORITY

时间: 2024-08-14 20:11:15

第七章 多线程的相关文章

第七章 集合

1 /***************** 2 ***第七章 集合 3 *******知识点: 4 **************1.Collection和Iterator接口 5 ******************1.1 Collection接口简介 6 ******************1.2 Iterator接口简介 7 ******************1.3 Map接口简介 8 **************2.Set接口 9 ******************2.1 HashSet

《Programming in Go》第七章并发编程译文

中文译名 Go 编程 外文原文名 Programming in Go 外文原文版出处 the United States on recycled paper at RR Donnelley in Crawfordsville, Indiana. 译 文: 第七章 并发编程 7.1主要概念 7.2例子 7.2.1:过滤器 7.2.2:并发查找 7.2.3:线程安全表 7.2.4:Apache 报告 7.2.5:找重复 并发编程能够让开发者实现并行算法,以及利用多处理器和多核写程序.但是在大多主流变

第七章

第七章 控制发光二极管. 尽管linux 驱动直接和硬件打交道,但并不是linux驱动直接向硬件中的内存写数据,而是与本机的i/o内存进行交互.所谓I/O内存是通过各种接口(PCI, USB.蓝牙以太网等)连接到主机的硬件在主机的内存映射.Linux内核提供了多个与I/O内存交互的函数.Linux内核的内存管理模块负责同步I/O内存与硬件的数据. 每一个连接Linux 的硬件在I/O内存中都会有映射首地址.在使用ioread 32.ioread32等函数读写I/O内存时需要指定这些首地址.Led

《Java编程那点事儿》读书笔记(七)——多线程

1.继承Thread类 通过编写新的类继承Thread类可以实现多线程,其中线程的代码必须书写在run方法内部或者在run方法内部进行调用. public class NewThread extends Thread { private int ThreadNum; public NewThread(int ThreadNum){ this.ThreadNum = ThreadNum; } public void run(){ try{ for(int i = 0;i < 10;i ++){ T

第七章:常用类

第七章:常用类 包装类 java中有8中基本类型,对应有八种包装类作用:包装类中封装了该类型常用的属性和方法,以方便操作.byte---->Byteshort--->Shortint--->Integerlong---->Longfloat---->Floatdouble---->Doublechar---->Characterboolean---->Boolean装箱:将基本数据类型转换成包装类,经常通过构造方法完成.Integer i = new Int

构建之法学习(第七章 MSF)

第七章 MSF MSF(Microsoft Solution Framework)微软解决方案框架: MSF是一套大型系统开发指南,是微软推荐的软件开发方法,它描述了如何用组队模型.过程模型和应用模型来开发Client/Server结构的应用程序,是在微软的工具和技术的基础上建立并开发分布式企业系统应用的参考. 一.MSF 9条基本原则 1.推动信息共享与沟通 --把所有信息都保留并公开,讨论要包括所有涉及的角色,决定要公开并告知所有人. 当然,对牵涉到技术机密.安全性等信息要采取必要的保护措施

Android开发艺术探索——第七章:Android动画深入分析

Android开发艺术探索--第七章:Android动画深入分析 Android的动画可以分成三种,view动画,帧动画,还有属性动画,其实帧动画也是属于view动画的一种,,只不过他和传统的平移之类的动画不太一样的是表现形式上有点不一样,view动画是通过对场景的不断图像交换而产生的动画效果,而帧动画就是播放一大段图片,很显然,图片多了会OOM,属性动画通过动态的改变对象的属性达到动画效果,也是api11的新特性,在低版本无法使用属性动画,但是我们依旧有一些兼容库,OK,我们还是继续来看下详细

第九章 前七章总结考试答案

前七章总结测验见附件内容

ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse

ROS机器人程序设计(原书第2版)补充资料 (柒) 第七章 3D建模与仿真 urdf Gazebo V-Rep Webots Morse 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 提供ROS接口的3D软件比较多,本章以最典型的Gazebo介绍为主,从Player/Stage/Gazebo发展而来,现在独立的机器人仿真开发环境,目前2016年最新版本Gazebo7.1配合ROS(kinetic)使用. 补充内容:http://blo