黑马程序员----------------JAVA基础线程
来源:互联网 发布:win10 不允许下载软件 编辑:程序博客网 时间:2024/05/16 07:28
多线程概述
进程:
正在运行的程序,是系统进行资源分配和调用的独立单位。
每一个进程都有它自己的内存空间和系统资源。
线程:
是进程中的单个顺序控制流,是一条执行路径
一个进程如果只有一条执行路径,则称为单线程程序。
一个进程如果有多条执行路径,则称为多线程程序。
简单说Thread: 线程:
进程:正在运行的应用程序
线程:进程中的一条执行路径
单线程: 应用程序只有一条执行路径
多线程: 应用程序有多条执行路径
创建线程对象的两种方式
方式1: 继承Thread
a: 自定义类 继承 Thread
b: 重新Thread类中的run()方法
c: 创建自定义类对象(线程对象)
d: 启动线程? start()方法
方式2: 实现Runnable
a: 自定义类 实现 Runnable
b: 实现接口中的run()方法
c: 创建自定义类对象
d: 创建Thread对象,然后把自定义类对象 作为构造方法的参数使用
e: 开启线程, start()方法
start() 与 run() 区别?
public void run(): 每个线程要执行的操作代码
public void start(): 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
run()直接调用,普通方法的使用,没什么意义
start(),启动一个线程,并调用该线程对象中的run方法
Thread类中方法:
public final String getName()返回该线程的名称。
public final void setName(String name)改变线程名称,使之与参数 name 相同。
public static Thread currentThread()返回对当前正在执行的线程对象的引用。
后台线程:
public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程。
当正在运行的线程都是守护线程时,Java 虚拟机退出
中断线程:
public final void stop() 停止
结束当前正在运行的线程
public void interrupt() 中断
InterruptedException:
中断当前正在运行的线程, 抛出一个中断异常,而运行还可以运行
线程优先级
public final int getPriority()返回线程的优先级。
public final void setPriority(int newPriority)更改线程的优先级。
public static final int MAX_PRIORITY 10 最大优先级
public static final int MIN_PRIORITY 1 最小优先级
public static final int NORM_PRIORITY 5 默认优先级
线程休眠
public static void sleep(long millis)让线程对象 休眠给定的毫秒值,当时间到后,继续运行
线程加入
public final void join() 等待该线程终止,当该线程结束后,才会执行其他线程
线程礼让
public static void yield()
同步机制:
首先想为什么出现问题?(也是我们判断是否有问题的标准)
是否是多线程环境
是否有共享数据
是否有多条语句操作共享数据
如何解决多线程安全问题呢?
基本思想:让程序没有安全问题的环境。
怎么实现呢?
把多个语句操作共享数据的代码给锁起来,让任意时刻只能有一个线程执行即可。
解决多线程安全问题
同步代码块
格式:
synchronized (锁对象) {
需要同步的代码
}
同步方法
(普通同步方法)
(静态同步方法)
格式:
修饰符 synchronized 返回值类型 方法名(参数列表){....}
注意:
同步代码块,如果有多个同步代码块,那么锁对象,要求一致
同步方法,同步方法的锁对象是谁? this
同步方法,同步静态方法的锁对象是谁? 字节码文件对象, 类名.class
将线程不安全的集合, 变为 线程安全的集合
Collections: 集合工具类
方法:
public static <T> Collection<T> synchronizedCollection(Collection<T> c)
public static <T> List<T> synchronizedList(List<T> list)
public static <T> Set<T> synchronizedSet(Set<T> s)
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
进程:
正在运行的程序,是系统进行资源分配和调用的独立单位。
每一个进程都有它自己的内存空间和系统资源。
线程:
是进程中的单个顺序控制流,是一条执行路径
一个进程如果只有一条执行路径,则称为单线程程序。
一个进程如果有多条执行路径,则称为多线程程序。
简单说Thread: 线程:
进程:正在运行的应用程序
线程:进程中的一条执行路径
单线程: 应用程序只有一条执行路径
多线程: 应用程序有多条执行路径
创建线程对象的两种方式
方式1: 继承Thread
a: 自定义类 继承 Thread
b: 重新Thread类中的run()方法
c: 创建自定义类对象(线程对象)
d: 启动线程? start()方法
方式2: 实现Runnable
a: 自定义类 实现 Runnable
b: 实现接口中的run()方法
c: 创建自定义类对象
d: 创建Thread对象,然后把自定义类对象 作为构造方法的参数使用
e: 开启线程, start()方法
start() 与 run() 区别?
public void run(): 每个线程要执行的操作代码
public void start(): 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
run()直接调用,普通方法的使用,没什么意义
start(),启动一个线程,并调用该线程对象中的run方法
Thread类中方法:
public final String getName()返回该线程的名称。
public final void setName(String name)改变线程名称,使之与参数 name 相同。
public static Thread currentThread()返回对当前正在执行的线程对象的引用。
后台线程:
public final void setDaemon(boolean on)将该线程标记为守护线程或用户线程。
当正在运行的线程都是守护线程时,Java 虚拟机退出
中断线程:
public final void stop() 停止
结束当前正在运行的线程
public void interrupt() 中断
InterruptedException:
中断当前正在运行的线程, 抛出一个中断异常,而运行还可以运行
线程优先级
public final int getPriority()返回线程的优先级。
public final void setPriority(int newPriority)更改线程的优先级。
public static final int MAX_PRIORITY 10 最大优先级
public static final int MIN_PRIORITY 1 最小优先级
public static final int NORM_PRIORITY 5 默认优先级
线程休眠
public static void sleep(long millis)让线程对象 休眠给定的毫秒值,当时间到后,继续运行
线程加入
public final void join() 等待该线程终止,当该线程结束后,才会执行其他线程
线程礼让
public static void yield()
同步机制:
首先想为什么出现问题?(也是我们判断是否有问题的标准)
是否是多线程环境
是否有共享数据
是否有多条语句操作共享数据
如何解决多线程安全问题呢?
基本思想:让程序没有安全问题的环境。
怎么实现呢?
把多个语句操作共享数据的代码给锁起来,让任意时刻只能有一个线程执行即可。
解决多线程安全问题
同步代码块
格式:
synchronized (锁对象) {
需要同步的代码
}
同步方法
(普通同步方法)
(静态同步方法)
格式:
修饰符 synchronized 返回值类型 方法名(参数列表){....}
注意:
同步代码块,如果有多个同步代码块,那么锁对象,要求一致
同步方法,同步方法的锁对象是谁? this
同步方法,同步静态方法的锁对象是谁? 字节码文件对象, 类名.class
将线程不安全的集合, 变为 线程安全的集合
Collections: 集合工具类
方法:
public static <T> Collection<T> synchronizedCollection(Collection<T> c)
public static <T> List<T> synchronizedList(List<T> list)
public static <T> Set<T> synchronizedSet(Set<T> s)
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
0 0
- 黑马程序员---java基础---线程
- 黑马程序员----------------JAVA基础线程
- 黑马程序员---java基础之多线程
- 黑马程序员-Java基础之多线程总结
- 黑马程序员:Java基础篇之多线程
- <<黑马程序员>>java基础之线程
- 黑马程序员—JAVA基础之多线程
- 黑马程序员java基础线程章节笔记
- 黑马程序员-JAVA基础之多线程
- 黑马程序员-------java基础之线程
- 黑马程序员——java基础:线程
- 黑马程序员--Java基础之多线程
- 黑马程序员-java基础之多线程
- 黑马程序员--Java基础之多线程
- 黑马程序员 java基础之多线程
- 黑马程序员java基础之多线程
- 黑马程序员 Java基础线程状态
- 黑马程序员----Java基础之多线程
- 搜集整理的一些面试经验相关的材料
- PHP MemCached 缓存应用
- 班主任好帮手之统计学生成绩
- linux下mysql的安装
- 查看数据库版本
- 黑马程序员----------------JAVA基础线程
- 《php核心技术与最佳实践》笔记4
- 网上商城—管理员删除商品
- linux编译ffmpeg2.6.2
- android剪贴板
- HDU ACM 1591 Encoded Love-letter
- mysql(5)初级使用
- c++ copy construct
- Android自定义锁屏的实现