java基础之多线程一:概述
概述: 进程有多条执行路径, 合成为: 多线程.
进程和线程的描述:
进程:
可执行程序(文件), 例如: .exe//可以把进程理解为一辆车.
一台电脑上可以有多个进程, 这些进程之间的数据是相互隔离的.//例如: qq.exe, wechat.exe
线程:
线程是进程的执行路径(执行单元)//可以把线程理解为: 是马路
一个进程可以有多条线程, 这些线程可以共享该进程的数据.//例如: 往QQ群共享放一个文件, 该群中的所有的用户都可以下载.
进程依托于系统,线程依托于CPU 多线程并行和并发的区别:
并行: 两个(多个)线程同时执行. //前提: 需要多核CPU 并发:
两个(多个)线程同时请求执行, 但是CPU同一瞬间只能执行一个线程,
于是就安排这些线程交替执行, 因为时间间隔非常短, 我们看起来好像是同时执行的, 其实不是. 多线程的实现方式: 链接
方式一: 继承Thread类.
步骤:
1) 定义一个类(MyThread), 继承Thread类.
2) 重写Thread#run(). //重写Thread类中的run()方法.
3) 把要执行的代码放入run()方法中.
4) 在测试类中,创建线程对象.
5) 开启线程. //start() 好处: 代码相对比较简单. //因为是继承Thread类, 所以可以直接使用Thread类中的非私有成员.
弊端: 扩展性相对较差. //因为是继承, 而Java中类之间的继承只能单继承, 不能多继承, 但是可以多层继承. 注意事项:
A: 如果调用run()方法, 只是普通的方法调用.
B: 开启线程必须调用start()方法, 该方法会自动去调用run()方法.
C: 同一线程不能重复开启, 否则会报: IllegalThreadStateException异常. 方式二: 实现Runnable接口.
步骤:
1) 定义一个类(MyRunnable), 实现Runnable接口.
2) 重写Runnable#run().
3) 把要执行的代码放入run()方法中.
4) 在测试类中, 创建Runnable接口的子类对象,
MyRunnable mr = new MyRunnable();
并将其作为参数传入Thread类的构造, 创建线程对象.
Thread th = new Thread(mr);
5) 开启线程. //start() 好处: 扩展性相对较强.
弊端: 代码相对比较 繁琐. 方式三: 结合线程池使用(实现Callable接口). Thread类中的成员:
构造方法:
public Thread();
public Thread(String name);
public Thread(Runnable target);
public Thread(Runnable target,String name); 成员方法:
run(); //里边定义的是线程要执行的代码, 该方法会自动被start()方法调用.
start(); //开启线程, 会自动调用run().
getName();
setName();
sleep(); //休眠线程, 单位是: 毫秒.
currentThread(); //获取当前正在执行的线程对象(的引用). 多线程同步: 链接
概述/作用:
多线程(环境) 并发 操作同一数据, 有可能引发安全问题, 就需要用到同步解决. 分类:
同步代码块:
格式:
synchronized(锁对象) {
//要加锁的代码
}
锁对象:
1) 同步代码块的锁对象可以是任意类型的对象.
2) 必须使用同一把锁, 否则可能出现锁不住的情况. 同步方法:
静态方法:
锁对象: 该类的字节码文件对象.
非静态方法:
锁对象: this 多线程的生命周期
新建, 就绪, 运行(有可能会发生阻塞(系统控制) 或者 等待(可人为控制)状态), 死亡.
java基础之多线程一:概述的更多相关文章
- Java基础-进程与线程之Thread类详解
Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ...
- JAVA基础知识总结1(概述)
JAVA概述: 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器. 1994年将Oak语言更名为Java. J ...
- JAVA基础系列(一) 概述与相关概念
万事开头难,来这个平台上已经有一段时间了,看到了很多高质量的文章,也很喜欢这种简约的风格.一直也想把自己的零散的知识体系组织起来,但苦于自己拙劣的文笔和不成流派的风格让大家笑话,直到现在才开始.可是从 ...
- Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
第一讲 IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都 ...
- java基础之JDBC一:概述及步骤详解
1. JDBC的简介 概述: 就是Java用来操作不同数据库(DBMS)的类库(技术), 本质就是一些类和接口. /* 类: DriverManager 接口: Driver, Connection, ...
- Java基础3-数组操作;类概述
昨日内容回顾 数据类型 基本数据类型 1) byte, short, int, long, float, double 2) boolean[true, false] 3) char 100: 默认为 ...
- C#夯实基础之多线程一:初识多线程
一. 烧水沏茶问题 在小学四年级有一个烧水沏茶问题,可以作为我们今天讨论话题的引子: 客人来了,要烧一壶茶,但是烧水需要5分钟,洗水壶需要1分钟,洗茶杯需要2分钟,接水需要1分钟,找茶叶需 ...
- Java基础系列-二进制操作
原创文章,转载请标注出处:<Java基础系列-二进制操作> 概述 Java源码中涉及到大量的二进制操作,非常的复杂,但非常的快速. Java二进制表示法 首先了解下二进制,二进制是相对十进 ...
- Java基础系列--HashMap(JDK1.8)
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/10022092.html Java基础系列-HashMap 1.8 概述 HashMap是 ...
随机推荐
- python-数据处理的包Numpy,scipy,pandas,matplotlib
一,NumPy包(numeric python,数值计算) 该包主要包含了存储单一数据类型的ndarry对象的多维数组和处理数组能力的函数ufunc对象.是其它包数据类型的基础.只能处理简单的数据分析 ...
- 机器学习算法实现解析——libFM之libFM的训练过程概述
本节主要介绍的是libFM源码分析的第四部分--libFM的训练. FM模型的训练是FM模型的核心的部分. 4.1.libFM中训练过程的实现 在FM模型的训练过程中,libFM源码中共提供了四种训练 ...
- Go开发Struct转换成map两种方式比较
最近做Go开发的时候接触到了一个新的orm第三方框架gorose,在使用的过程中,发现没有类似beego进行直接对struct结构进行操作的方法,有部分API是通过map进行数据库相关操作,那么就需要 ...
- 【MFC】MFC绘图不闪烁——双缓冲技术
MFC绘图不闪烁——双缓冲技术[转] 2010-04-30 09:33:33| 分类: VC|举报|字号 订阅 [转自:http://blog.163.com/yuanlong_zheng@126/ ...
- HihoCoder 1068 RMQ-ST算法+BIT
以前都是用的BIT或者线段树(前者多一些). 对于ST(Sparse Table),在求倍增or公共祖先(LCA)时见过,说明还有其他用处,所以还是学习一下. 首先是预处理,用动态规划(DP)解决. ...
- bzoj 4987 Tree
Written with StackEdit. Description 从前有棵树. 找出\(K\)个点\(A_1,A_2,-,A_K\). 使得\(∑dis(A_i,A_{i+1}),(1<= ...
- python 使用sk_learn 遇到 问题ValueError: Expected 2D array, got 1D array instead:
这里我找到我的问题是: 使用的是一个新的scikit学习版本,它抛出了一个错误,因为在新版本中,所有东西都必须是一个二维矩阵,甚至是一个列或行. 它甚至说:用数组来重塑你的数据.如果您的数据有一个单独 ...
- BZOJ5340: [Ctsc2018]假面
BZOJ5340: [Ctsc2018]假面 https://lydsy.com/JudgeOnline/problem.php?id=5340 分析: 背包,只需要求\(g_{i,j}\)表示强制活 ...
- spring的<array>标签错误
1,复习了一下spring xml的配置 单个默认命名空间 我们看到,在配置文件中,beans,bean等元素我们是没有使用命名空间前缀的.重复限定一个要在命名空间中使用的元素或属性可能会非常麻烦.这 ...
- yii2史上最简单式安装教程,没有之一(转)
测试说明:按照文章下载文件,虽然是tgz文件,用winrar解压,在CMD中运行init.bat文件. 既然是安装Yii,我们先去官网下载一份Yii的高级模版,什么,你说打开页面乱七八糟的英文字母你看 ...