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是 ...
随机推荐
- Arcgis Add-In开发入门实例
作为一个本科侧重于应用,工作之后却做了开发的程序员来说,做GIS,开发应该是一门必修课,只是,苦于各种原因吧,做GIS应用的人会开发的很少,做GIS开发的大部分都是计算机出身,痛心疾首啊-- 不好意思 ...
- 暴力破解Windows RDP(3389)
RDP是远程桌面协议. $ nmap your_target Starting Nmap 7.01 ( https://nmap.org ) at 2016-09-20 17:29 CST Nmap ...
- HihoCoder 1183 : 连通性一·割边与割点(模板)
连通性一·割边与割点 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢失.为了避免再次 ...
- bzoj 2282 消防
Written with StackEdit. Description 某个国家有\(n\)个城市,这\(n\)个城市中任意两个都连通且有唯一一条路径,每条连通两个城市的道路的长度为\(z_i(z_i ...
- Python 代码使用pdb调试技巧
Debug 对于任何开发人员都是一项非常重要的技能,它能够帮助我们准确的定位错误,发现程序中的 bug.python 提供了一系列 debug 的工具和包,可供我们选择.本文将主要阐述如何利用 pyt ...
- 4 字符串 Swift/Objective -C ——《Swift3.0从入门到出家》
4 字符串 Swift and Object-C 字符串由多个字符组成,使用 “” 引起的内容 swift语言中提供了两种字符串:可变字符串和不可变字符串 可变字符串:字符串的内容可以修改,字符串 ...
- Linux修改数据库的访问权限
以下方法可以帮助你解决这个问题了,下面的语句功能是,建立一个用户为monitor密码admin权限为和root一样.允许任意主机连接.这样你可以方便进行在本地远程操作数据库了. CREATE USER ...
- bzoj 2119 股市的预测 —— 枚举关键点+后缀数组
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2119 思路就是对于这个形如 ABA 的串,枚举 A 的长度,并按照长度分出几块,找到一些关键 ...
- Oracle记录(四) 简单查询、限定查询、数据的排序
一.简单查询 SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统.ANSI(美国国家标准学会) ...
- 发现一个github的奇葩设定
commit时留下的邮箱,会显示在github的提交记录里,然后居然自动找服务器上的这个邮箱注册的人,显示这个用户名.