java 多线程 快速入门
------------恢复内容开始------------
java 多线程 快速入门
1. 进程和线程
什么是进程?
进程是正在运行的程序它是线程的集合
进程中一定有一个主线程
一个操作系统可以有多个线程
什么是线程?
线程就是独立的运行一条执行路径
一个独立的执行单元 , 一个执行流程
为什么要使用多线程?
多线程提高程序效率 , 使用多线程 , 每个线程互补影响
2.创建线程的方式有哪些
1.使用继承 Thread类方式
如下示例

结果

1.继承 Thread 类
class CreateThread_1 extends Thread { /*......*/}
2.重写方法 run()
public void run() {/*......*/}
3.创建对象
CreateThread_1 t1 = new CreateThread_1 ()
4.启动线程
ti.start()
注意 : 如果 是直接 调用 run() 方法的话 它还是 单线程 会 按顺序向下执行
直接调用 run() 方法 的话 也就是一个普通方法
结果会是

2.使用实现 Runnable 接口
如下示例

结果

1.实现Runnable接口
class CreateThread_2 implements Runnable {/*.....*/}
2.实现 run() 方法
public void run() {/*.....*/}
2.启动线程
// 创建对象
CreateThread_2 t1 = new CreateThread_2();
Thread thread = new Thread(t1);
// 调用 start() 方法 启动线程
thread.start();
注意 : Runnable 接口 没有 start()方法
所以我们要用到 Thread 类 的 start() 方法
3.Callable 内部匿名创建
如下示例
匿名 Thread 类

示例 2

结果

匿名内部 创建多线程 比 Thread 类 和 Runnable 接口 更 灵活
多线程常用 api 方法
start() 启动线程
getId() 获取当前线程 id 编号 从0 开始
getName() 获取当前线程名称
例如:


sleep(1000) 休眠 1 秒
stop() 停止线程
currentThread() 获取当前线程对象
(Thread.currentThread().getId() 获取当前线程 id)
Thread(String name)分配一个新的 Thread 对象 并且定义名称
例如 
多线程有几种状态
1.新建
new Thread();
2.准备
调用 start () 方法时 不会马上执行
3.运行
Cpu 开始执行 run 时
4.休眠
调用sleep()方法
或者 wait()方法
5.停止(死亡)
Run 方发执行完毕或者调用 stop()方法
流程图

join ()方法
作用 : 先让别的线程先执行 ( 在当前线程 , 当前线程 让出 )
示例: 让子线程先执行

结果

总结 :
进程是正在运行的程序,它是线程的集合
线程就是在独立运行一条执行路径
多线程 就是为了提高程序的效率
进程是线程集合
线程是进程一条执行路径
Thread 类创建线程
Runnable 接口创建线程
匿名内部创建线程
多线程的常用api方法
多线程的运行状态
------------恢复内容结束------------
java 多线程 快速入门
1. 进程和线程
什么是进程?
进程是正在运行的程序它是线程的集合
进程中一定有一个主线程
一个操作系统可以有多个线程
什么是线程?
线程就是独立的运行一条执行路径
一个独立的执行单元 , 一个执行流程
为什么要使用多线程?
多线程提高程序效率 , 使用多线程 , 每个线程互补影响
2.创建线程的方式有哪些
1.使用继承 Thread类方式
如下示例

结果

1.继承 Thread 类
class CreateThread_1 extends Thread { /*......*/}
2.重写方法 run()
public void run() {/*......*/}
3.创建对象
CreateThread_1 t1 = new CreateThread_1 ()
4.启动线程
ti.start()
注意 : 如果 是直接 调用 run() 方法的话 它还是 单线程 会 按顺序向下执行
直接调用 run() 方法 的话 也就是一个普通方法
结果会是

2.使用实现 Runnable 接口
如下示例

结果

1.实现Runnable接口
class CreateThread_2 implements Runnable {/*.....*/}
2.实现 run() 方法
public void run() {/*.....*/}
2.启动线程
// 创建对象
CreateThread_2 t1 = new CreateThread_2();
Thread thread = new Thread(t1);
// 调用 start() 方法 启动线程
thread.start();
注意 : Runnable 接口 没有 start()方法
所以我们要用到 Thread 类 的 start() 方法
3.Callable 内部匿名创建
如下示例
匿名 Thread 类

示例 2

结果

匿名内部 创建多线程 比 Thread 类 和 Runnable 接口 更 灵活
多线程常用 api 方法
start() 启动线程
getId() 获取当前线程 id 编号 从0 开始
getName() 获取当前线程名称
例如:


sleep(1000) 休眠 1 秒
stop() 停止线程
currentThread() 获取当前线程对象
(Thread.currentThread().getId() 获取当前线程 id)
Thread(String name)分配一个新的 Thread 对象 并且定义名称
例如 
多线程有几种状态
1.新建
new Thread();
2.准备
调用 start () 方法时 不会马上执行
3.运行
Cpu 开始执行 run 时
4.休眠
调用sleep()方法
或者 wait()方法
5.停止(死亡)
Run 方发执行完毕或者调用 stop()方法
流程图

join ()方法
作用 : 先让别的线程先执行 ( 在当前线程 , 当前线程 让出 )
示例: 让子线程先执行

结果

总结 :
进程是正在运行的程序,它是线程的集合
线程就是在独立运行一条执行路径
多线程 就是为了提高程序的效率
进程是线程集合
线程是进程一条执行路径
Thread 类创建线程
Runnable 接口创建线程
匿名内部创建线程
多线程的常用api方法
多线程的运行状态
java 多线程 快速入门的更多相关文章
- java多线程快速入门(六)
多线程应用实例(批量发送短信) 1.创建实体类 package com.cppdy; public class UserEntity { private int id; private String ...
- java多线程快速入门(一)
1.什么是进程 比如:QQ.QQ游戏.eclipse都是进程,可以通过任务管理器查看进程 2.进程和线程区别 线程是进程的一部分,一个进程可以包含多个线程,一个线程只能属于一个进程 进程是所有线程的集 ...
- java多线程快速入门(二十二)
线程池的好处: 避免我们过多的去new线程,new是占资源的(GC主要堆内存) 提高效率 避免浪费资源 提高响应速度 作用:会把之前执行某个线程完毕的线程不会释放掉会留到线程池中给下一个调用的线程直接 ...
- java多线程快速入门(二十一)
CountDownLatch(闭锁)计数器 有一个任务A,它要等待其他4个任务执行完毕之后才执行,此时就可以利用CountDownLatch来实现这种功能 package com.cppdy; imp ...
- java多线程快速入门(二十)
1.Java.util的线程安全工具类 Vector(线程安全) ArrayList(线程不安全) HashTable(线程安全) HashMap(线程不安全) 2.将线程不安全集合变为线程安全集合 ...
- java多线程快速入门(十八)
Lock锁是JDK1.5之后推出的并发包里面的关键字(注意捕获异常,释放锁) Lock与synchronized的区别 Lock锁可以人为的释放锁(相当于汽车中的手动挡) synchronized当线 ...
- java多线程快速入门(十七)
多线程通讯实例(必须要有多个线程.必须要管理同一个变量:线程A生产一个变量,线程B消费一个变量) package com.cppdy; class User { public String usern ...
- java多线程快速入门(十五)
使用violate关键字解决了变量的可见性问题(volatile让多线程刷新falg的值) package com.cppdy; class MyThread11 extends Thread { / ...
- java多线程快速入门(十四)
使用atomicInteger解决了原子性问题(AtomicInteger保证每次只能一个线程操作count) package com.cppdy; import java.util.concurre ...
随机推荐
- D-query SPOJ - DQUERY 主席树查询区间内不同数出现的次数
我们不以权值建立主席树,而是区间端点作为值建立线段树,一个个插入a[i],我们发现这个数之前是存在的,就需要在上个版本的主席树上减去原来的位置,并加上现在的位置,这样我们在i版本的主席树,维护1-r中 ...
- Android Studio(五):修改Android Studio项目包名
Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...
- LRJ-Example-06-13-Uva1103
pic[][]数组存储每个点的值,0或1,输入时在原图的周围加了一圈0. color[][]数组存储每个点的color值,从1开始,dfs(row, col, c) 负责对每个点着色,连通在一起的连通 ...
- c++第一次的个人作业
循环结构是c++中重要的结构用以实现代码的反复使用 三种不同的循环结构以及嵌套是必须认识与能够使用的 三种循环结构分别是: 在for循环中可以在for后的括号内加入初始条件,循环条件与参数变化.使得整 ...
- 全面理解Python中的类型提示(Type Hints)
众所周知,Python 是动态类型语言,运行时不需要指定变量类型.这一点是不会改变的,但是2015年9月创始人 Guido van Rossum 在 Python 3.5 引入了一个类型系统,允许开发 ...
- Python--day19--collections模块
常用模块一的各个模块解释: 文件名不要起跟模块名一样:(模块本身就是一个py文件) collection模块: namedtuple方法: 例1: 例2: dequeue方法:双端队列 有序字典Ord ...
- HDU 1114 完全背包问题
题意:有一个存钱罐,空罐时的重量是e,满罐时的重量是f,现在有n种硬币,每一种有无限个,现在给出每一种硬币的价值p和重量w,问存钱罐中最少钱,输出最小钱,否则输出... 思路:变形的完全背包问题,只是 ...
- 立足GitHub学编程:13个不容错过的Java项目
立足GitHub学编程:13个不容错过的Java项目 今天我们将整理一大波干货满满的Java示例代码与能力展示素材. GitHub可谓一座程序开发的大宝库,有些素材值得fork,有些则能帮助我们改进自 ...
- html5在微信中不允许放大缩小页面
在头部添加 <meta name="viewport" content="width=device-width, initial-scale=1, maximum- ...
- Mac PHPStorm清除SVN配置缓存