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的时候我就取 ...
随机推荐
- Linux文本过滤常用命令(转)
01 cat命令 通常用来显示文本文件的内容 一般用来查看比较短的文本文件,因为其缓冲区有限 -s选项可以用来合并文件中多余的空行,多个空行将被压缩为一个空行; -n选项可以显示行号 -b选项可以跳过 ...
- 删除VisualStudio 2013中的 "send Feedback" 按钮
在VisualStudio 2013中,在标题栏中增加了一个 "send Feedback" 按钮,用于给微软发送Bug和回馈(或者一个哭脸和笑脸).这个按钮对于开发来说基本上没用 ...
- CM3大礼包
- hdu 1283 最简单的计算机
水题. .. import java.util.Scanner; public class Main { static int m1, m2; static int r1, r2, r3; publi ...
- leetcode题解:Valid Parentheses(栈的应用-括号匹配)
题目: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the ...
- ElasticSearch refresh和flush的理解
在索引数据的时候,要保证被索引的文档能够立即被搜索到,就要涉及到_refresh 和_flush这两个方法. 1.fresh 当索引一个文档,文档先是被存储在内存里面,默认1秒后,会进入文件系统缓存, ...
- 【Hadoop】Hadoop MR 如何实现倒排索引算法?
1.概念.方案 2.代码示例 InverseIndexOne package com.ares.hadoop.mr.inverseindex; import java.io.IOException; ...
- iOS小技巧 - 为按钮设置不同状态下的背景色
我们知道直接在Storyboard中设置按钮的背景色是不能根据不同状态来更改的,那问题来了,如果我们需要在不同的状态下(比如按钮没有被按下或者被按下),使得按钮呈现不同的背景色怎么办? 比如上图左边是 ...
- h5+ 管理设备信息
Device模块管理设备信息,用于获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 1.属性 1.1.imei: 设备的国际移动设备身份码, ...
- Install RabbitMQ server in CentOS 7
About RabbitMQ RabbitMQ is an open source message broker software, also sometimes known as message-o ...