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 ...
随机推荐
- github下载慢,轻松提速教程
获取github的IP地址访问:https://www.ipaddress.com/ 网址 依次获取以下三个网址的IP github.comgithub.global.ssl.fastly.netco ...
- 排他网关(ExclusiveGateWay)
网关(ExclusiveGateWay) 作者:邓家海2018年3月11日 00:13:25 情景:某一家公司最近在给一个单位做一个财务审批的OA.具体需求是这样的:当部门申请的金额小于一万块的时候, ...
- 使用Fiddler抓取微信饿了么小程序数据
使用Fiddler抓取微信饿了么小程序数据 准备 一部装载Android 7.0以下的手机:此处使用华为荣耀5x 微信小程序7.0以下版本:此处为6.6.7.此处可通过豌豆荚应用下载. 安装好的Fid ...
- H3C OSPF协议区域LSA发布
- HashMap和HashSet的使用,区别。集合,Array、Collection(List/Set/Queue)、Map
HashMap和HashSet的区别 HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collectio ...
- tf.train.string_input_producer()
处理从文件中读数据 官方说明 简单使用 示例中读取的是csv文件,如果要读tfrecord的文件,需要换成 tf.TFRecordReader import tensorflow as tf file ...
- asp dotnet core 图片在浏览器没访问可能原因
我写了一个项目用来广告就用到广告的图片,但是广告的图片放在博客的链接无法访问,连我的方法都没有调用,而我尝试网页直接访问图片链接是可以访问的,最后找到原因是广告插件禁用了图片访问 我在一个方法创建了广 ...
- CF809D Hitchhiking in the Baltic States
CF809D Hitchhiking in the Baltic States CF809D 长度为n的序列{xi},n<=3e5,范围在(li,ri)之间,求LIS最长是多长g(i,l)表示前 ...
- Microsoft Ignite The Tour Beijing 记录: Learn Connect Explore
坦率的说,这是我第一次以讲师的身份参加微软的Ignite大会.同时我也很开心能作为微软社区MVP来参加这个活动.而我的演讲主题也和我的社区有关——Unity.C#以及跨平台开发. 这篇用来记录MSIg ...
- BIO、NIO、AIO 个人总结
BIO(blocking io) BIO即为阻塞IO,在网络编程中,它会在建立连接和等待连接的对端准备数据阶段进行阻塞.因此为了支撑高并发的用户访问,一般会为每一个socket 连接分配一个线程.但使 ...