多线程的理解

本文介绍了多线程的基本概念,包括线程定义、为何需要线程以及进程与线程的区别。通过银行和公司业务的例子阐述了多线程的应用。还展示了如何使用Thread类和lambda表达式创建线程,以及使用jconsole观察线程。
摘要由CSDN通过智能技术生成

1.认识多线程(Thread)

1.1概念

1) 线程是什么

一个线程就是一个 " 执行流 ". 每个线程之间都可以按照顺讯执行自己的代码 . 多个线程之间 " 同时 " 执行着多份代码.
例子:
银行的例子。我们主要描述的是个人业务,即一个人完全处理自己的
业务。我们进一步设想如下场景:
一家公司要去银行办理业务,既要进行财务转账,又要进行福利发放,还得进行缴社保。
如果只有张三一个会计就会忙不过来,耗费的时间特别长。为了让业务更快的办理好,张三又找
来两位同事李四、王五一起来帮助他,三个人分别负责一个事情,分别申请一个号码进行排队,
自此就有了三个执行流共同完成任务,但本质上他们都是为了办理一家公司的业务。
此时,我们就把这种情况称为多线程,将一个大任务分解成不同小任务,交给不同执行流就分别
排队执行。其中李四、王五都是张三叫来的,所以张三一般被称为主线程( Main Thread )。
2) 为啥要有线程
首先 , " 并发编程 " 成为 " 刚需 ".
单核 CPU 的发展遇到了瓶颈 . 要想提高算力 , 就需要多核 CPU. 而并发编程能更充分利用多核 CPU
资源 .
有些任务场景需要 " 等待 IO", 为了让等待 IO 的时间能够去做一些其他的工作 , 也需要用到并发编
.
其次 , 虽然多进程也能实现 并发编程 , 但是线程比进程更轻量 .
创建线程比创建进程更快 .
销毁线程比销毁进程更快 .
调度线程比调度进程更快
3) 进程和线程的区别
进程是包含线程的 . 每个进程至少有一个线程存在,即主线程。
进程和进程之间不共享内存空间 . 同一个进程的线程之间共享同一个内存空间
比如之前的多进程例子中,每个客户来银行办理各自的业务,但他们之间的票据肯定是不想让别
人知道的,否则钱不就被其他人取走了么。而上面我们的公司业务中,张三、李四、王五虽然是
不同的执行流,但因为办理的都是一家公司的业务,所以票据是共享着的。这个就是多线程和多
进程的最大区别。
进程是系统分配资源的最小单位,线程是系统调度的最小单位。
并发、并行、串行
并发:同一个对象被多个线程同时操作。(这是一种假并行。即一个CPU的情况下,在同一个时间点,CPU只能执行一个代码,因为切换的很快,所以就有同时执行的错觉)。
并行:多个任务同时进行。并行必须有多核才能实现,否则只能是并发。
串行:一个程序处理完当前进程,按照顺序接着处理下一个进程,一个接着一个进行。
1.2 第一个多线程程序
感受多线程程序和普通程序的区别 :
每个线程都是一个独立的执行流
多个线程之间是 " 并发 " 执行的 .

 

使用 jconsole 命令观察线程
1.3 创建线程
  继承 Thread

 

1) 继承 Thread 来创建一个线程类 .
以下是代码
运行结果:

 

lambda 表达式创建 Runnable 子类对象

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值