JAVA 多线程概述

这篇博客介绍了线程与进程的关系,指出线程是进程的一部分,且线程的创建开销小于进程。文章讨论了引入线程的原因,并通过一个代码示例展示了Java多线程的交错执行,帮助读者直观理解线程概念。
摘要由CSDN通过智能技术生成

线程与进程的关系
   线程是进程的一部分。
   没有线程的进程可以看做是单线程的,所以进程可以单独存在,但线程必须依赖于一个进程存在。而且在系统中,资源分配的基本单位是进程,一个进程内的所有线程是共享系统分配给该进程的所有资源。(可以抽象的理解为一个大家庭(进程)内的所有成员(线程)可以一起干活,但是政府分配粮食是按家庭为单位的)

为什么要引入线程
   其实计算机最开始的是没有线程的概念或者说是单线程的,大家概念里只有进程。所以首先我们要理解进程是什么样的构成。

进程 = 程序段 + 进程控制块(PCB) + 数据段

   进程的PCB就是进程的身份信息档案(PCB解释网上有很多就不展开讲)。每创建一个进程就需要相应的创建一个PCB,PCB里保存的描述信息非常的详细,创建也就意味着更大的开销。线程也有属于自己的TCB,但是TCB保存的信息可比PCB要少太多,所以线程的比进程的创建开销要小得多。


用一个Demo直观的感受多线程。
《JAVA核心技术 卷一》例题12-1和12-2

先看输出可能是这样的,可以感受到两个线程交错执行:

Thread[Thread-0,5,main]Thread[Thread-1,5,main]      
14.79 from 0 to 1     964.88 from 2 to 3 Total Balance:   
4000.00

 Total Balance:   3035.12

Thread[Thread-0,5,main]     883.84 from 0 to 1 Total 
Balance:   4000.00

Thread[Thread-0,5,main]      46.35 from 0 to 1 Total 
Balance:   4000.00

Thread[Thread-1,5,main]      21.22 from 2 to 3 Total 
Balance:   4000.00

Thread[Thread-0,5,main]      54.76 from 0 to 1 Total 
Balance:   4000.00

Thread[Thread-1,5,main]       1.25 from 2 to 3 Total 
Balance:   4000.00

代码示例

首先创建一个Bank 类

public class Bank {
   
	private final double[] accounts;
	
	public Bank(int n, double initialBalance) {
   
		accounts = new double[n];
		// 将initialBalance中的数分给accounts数组中的每一个元素。
		Arrays.fill(accounts,initialBalance);
	}
	
	// 设置账户转移,从from账户,转移到to账户。
	public void transfer(int from, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值