Java多线程编程总结一:多线程基本概念
Java多线程编程总结一 – 初识多线程
进程、多进程、线程、多线程的概念
进程(process):CPU的执行路径。通俗的说就是系统中正在运行的程序。比如我们打开了浏览器、QQ等等,这些程序一旦被打开运行了,就是所谓的进程。
多进程:系统中同时运行的多个程序。这个我们应该不难理解了,在打开浏览器的同时我们也可以QQ聊天、CS单机游戏等。
线程(thread):运行在进程中的运行单元。比如迅雷下载中我们的某一个下载任务就是一个线程。
多线程:同理可知,每个进程里面有多个独立的或者相互有协作关系的运行单元我们称之为多线程。
第一个多线程程序
Java中多线程的实现方式有两种:继承Thread父类、实现Runnable接口。
首先我们实现一个简单的多线程的实现,交替执行程序并输出1~20。
package MyJavaThread;
public class MyFirstThreadTest {
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
int i=1;
while (i<=20) {
System.out.println(Thread.currentThread().getName() + ": " + i++);
}
}
}).start();
int i=20;
while (i>0) {
System.out.println(Thread.currentThread().getName() + ": " + i--);
}
}
}
部分截图如下

没有真正意义上的多线程
我们知道,CPU在同一时刻只能给一个程序分配资源(单核情况下),也就是赋予一个程序运行权力,那么我们看到一次能运行好几个程序其实是CPU来回切换执行权产生的效果。因而让人们觉得是并发运行的,只是CPU切换的速度非常快罢了。
线程的状态
线程有自己的状态,我们称为生命周期:初始状态、运行状态、冻结状态和终止状态。
线程的朝阳--初始化状态
线程的初始化就是我们所说的创建了一个线程,也就是实例化了一个Thread的子类,等着被start。
线程的青春--运行状态
当我们调用了start方法的时候,此时线程就处于了运行状态。但是严谨的说,此时线程不一定就会马上运行,它处于一个临时状态,即在CPU的执行队列当中,等待CPU轮回进行执行,获取执行权。
线程的感冒--冻结状态
线程被调用了sleep方法或者调用了wait方法之后,放弃了CPU的执行权。但是冻结之后也可以再次回到运行状态,重新获取CPU的执行权。当然也可以在中断或出现异常的时候直接到死亡状态。
线程的落幕—死亡状态
如果线程出现了致命的异常或者线程的执行逻辑完毕,这就意味着线程要谢幕say byebye了。死亡后的线程不能再次回到任何一个状态。
总结
一个进程至少有一个线程在运行
Main函数本身就是一个线程,我们称之为主线程
实现多线程的方式是可以继承Thread类,也可以实现Runnable接口
没有严格意义上的并发
JVM自身有很多后台线程在运行,支撑着我们的程序
初始化状态只能到运行状态
运行状态能到冻结状态和死亡状态
冻结状态能到运行状态和死亡状态
死亡状态只能接受死亡的事实
Java多线程编程总结一:多线程基本概念的更多相关文章
- 原创】Java并发编程系列2:线程概念与基础操作
[原创]Java并发编程系列2:线程概念与基础操作 伟大的理想只有经过忘我的斗争和牺牲才能胜利实现. 本篇为[Dali王的技术博客]Java并发编程系列第二篇,讲讲有关线程的那些事儿.主要内容是如下这 ...
- Java多线程编程核心技术(三)多线程通信
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...
- day05 Java网络编程socket 与多线程
java网络编程 java.net.Socket Socket(套接字)封装了TCP协议的通讯细节,是的我们使用它可以与服务端建立网络链接,并通过 它获取两个流(一个输入一个输出),然后使用这两个流的 ...
- 【java并发编程实战】-----线程基本概念
学习Java并发已经有一个多月了,感觉有些东西学习一会儿了就会忘记,做了一些笔记但是不系统,对于Java并发这么大的"系统",需要自己好好总结.整理才能征服它.希望同仁们一起来学习 ...
- Java多线程编程核心技术---Lock的基本概念和使用
Lock接口: ReentrantLock的基本功能: ReentrantLock的lock和unlock方法进行加锁,解锁.可以起到和synchronized关键字一样的效果: 选择性通知!!!: ...
- 《Java多线程编程核心技术》——多线程与同步
Java多线程 线程可以理解为是在进程中独立运行的子任务. Java多线程 使用方法 Java中实现多线程主要有以下两种方法: 继承Thread,而后实例化该对象调用start()即启动了新线程; 实 ...
- JAVA并发编程学习笔记------多线程调优
1. 多线程场景下尽量使用并发容器代替同步容器 (如ConcurrentHashMap代替同步且基于散列的Map, 遍历操作为主要操作的情况下用CopyOnWriteArrayList代替同步的Lis ...
- 【Java并发编程】:多线程环境中安全使用集合API
在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于Vector来说,用来添加和删除元素的方法是同步的.如果只有一个线程与Vector的实例交互,那么,要求获取和释放对 ...
- Java并发编程(03):多线程并发访问,同步控制
本文源码:GitHub·点这里 || GitEE·点这里 一.并发问题 多线程学习的时候,要面对的第一个复杂问题就是,并发模式下变量的访问,如果不理清楚内在流程和原因,经常会出现这样一个问题:线程处理 ...
- 多线程编程-- part 3 多线程同步->synchronized关键字
多线程同时访问一个资源,可以会产生不可预料的结果,所以为这个资源加锁,访问资源的第一个线程为其加锁后,其他线程便不能在使用那个资源,直到锁被解除. 举个例子: 存款1000元,能取出800的时候我就取 ...
随机推荐
- mysql的load data,高速将文本文件,插入数据库中
1语法 LOAD DATA [ LOW_PRIORITY | CONCURRENT ] [ LOCAL ] INFILE 'file_name.txt' [ REPLACE | IGNORE ] IN ...
- 【spring data jpa】spring data jpa的in查询
如下: List<Dealer> findDealersByTidAndUidIn(String tid,List<String> uidList); 在dao层里面直接写这个 ...
- 永久关闭WPS热点
可以通过设置WPS,关闭广告推送和热点即可,方法如下 准备:打开已经安装wps的设备 1.单击电脑左下角,找到wps 2.选中WPS Office中的配置工具 3.在弹窗中选择“高级” 4.打开之后选 ...
- 用ASP实现JS的decodeURIComponent()函数
<% response.write jsDecodeURIComponent( "%E6%B5%8B%E8%AF%95" ) %> <script languag ...
- Linux用户配置sudo权限(visudo)
sudo的工作过程如下: 1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限 2,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认 ...
- json字符串与java对象互转
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- Java反射学习总结五(Annotation(注解)-基础篇)
Annotation(注解)简单介绍: 注解大家印象最深刻的可能就是JUnit做单元測试,和各种框架里的使用了. 本文主要简介一下注解的用法,下篇文章再深入的研究. annotation并不直接影响代 ...
- MSSQL站库分离情况的渗透思路
本文转自:http://bbs.blackbap.org/thread-6203-1-2.html 1. 服务器属内网环境,站库分离,通过web.config找到数据库服务库SA帐号密码,成功添加用户 ...
- Shell 同时读取多个文件
现有两个文件 1.txt 2.txt,内容分别如下: [root@SHO-XXW-- readmulti]# .txt [root@SHO-XXW-- readmulti]# .txt a b c ...
- How to check the 'OLE DB Destination' INPUT and OUTPUT
Step 1: Step 2: Step 3: