【JAVA学习之路 | 提高篇】进程与线程(Thread)

简介: 【JAVA学习之路 | 提高篇】进程与线程(Thread)

1.相关概念

(1). 程序(program) : 为完成特定任务,用某种语言编写的一组指令的集合.即指一块静态的代码.


(2). 进程(progress) : 程序的一次执行过程,或者是正在运行中的应用程序(如正在运行的QQ,正在运行的网易第五人格).


  • 每一个进程都有一份独立的内存空间,系统运行一个程序便是进程创建到运行到销毁的过程.
  • 程序是静态的,而进程是动态的.
  • 进程作为操作系统调度和分配资源的最小单位,系统在运行时会为每个线程分配内存.
  • 现代的操作系统,大多支持多进程的,支持同时运行多个程序.(比如你边玩着第五人格,边开着QQ聊天界面跟女朋友聊天).

(3). 线程(thread) : 进程可进一步细化为线程,是程序内部的一条执行路径.一个进程至少有一个线程,可以有很多线程.

  • 一个进程同一时间如果并行运行多个线程,就是支持多线程的(比如毒王360,点开360便创建了一个进程,而你同时使用杀毒,清理垃圾等功能时,便是一个进程执行多个线程).
  • 线程作为CPU调度和执行的最小单位.
  • 一个进程的多个线程可以共享相同的内存单元.他们从同一个堆中分配对象,可以访问相同的对象.使得线程间的通信更方便简洁高效.但多个线程操作内存单元可能会带来安全隐患.
  • 线程独享区域 : 虚拟机栈,本地方法栈,程序计数器.
  • 线程共享区 : 堆(Heap),方法区(Method Area).

注 :

  • 不同进程之间是不共享内存的.
  • 而不同进程之间可以通信,但通信成本可能较高.

2.线程调度

(1). 分时调度 : 所有线程轮流使用CPU的使用权,并且平均分配每个线程占用CPU的运行时间.

(2). 抢占式调度 : 让优先级高的线程较大概率的占用CPU调用时间,如果所有线程优先级相同,那么将随机选择一个线程.java使用的便是该种调度.

3.多线程程序的优点

背景 : 以单核CPU为例,只使用单个线程先后完成多个任务,肯定比多个线程完成的时间更短,那为什么要使用多线程程序呢.

  1. 提高程序响应效率,对图形化界面更有意义,可以同时做多个事情.
  2. 提高计算机CPU的利用率.
  3. 改善程序结构.将既长又复杂的程序分成多个线程独立运行,利于理解和修改.

4.单核CPU与多核CPU

(1). 单核CPU : 在一个时间单元内,只执行一个线程的任务.可以把CPU看作是医生的诊室,每个人只能进去一个人进去看病.代码进过一系列前导操作,到CPU运行时发现只有一个医生,所以只能排队一次看病.


这时如果要提升系统性能,有两种方法 : 要么多核处理(一个医生给一个病人看病,换为多个医生给多个病人看病),要么提升CPU性能(让医生看病快点).


问 : 那么多核的CPU是单核的整数倍吗.理论上是不可能的.至少两方面损耗.

  • 其他共有资源的限制 : 4核CPU对应的寄存器,内存并没有扩充为单核的四倍.(就像四个医生给四个病人看病,但医院的b超机器还只是原来的一台).
  • 多个CPU的协调管理损耗 : 多个核心同时运行两个相关的任务,可能需要考虑到任务同步,这就需要损耗额外的性能.

5.并行与并发

(1). 并行(parallel) : 指两个及以上的任务同时发生,即同一时刻,多个任务在多个CPU上同时进行.

------------------------

------------------------


------------------------


(2). 并发(concurrency) : 指两个及以上的任务在同一时间段发生.即一个时间段,多个任务在单个CPU上快速轮转,交替执行.宏观上表现为并行.


-------                         ------


       ----------                                    ------


                   -----------          -----------

相关文章
|
7天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
27 9
|
7天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
8天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
9天前
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
21 1
|
6月前
|
安全 Java
深入理解Java并发编程:线程安全与性能优化
【2月更文挑战第22天】在Java并发编程中,线程安全和性能优化是两个重要的主题。本文将深入探讨这两个主题,包括线程安全的基本概念,如何实现线程安全,以及如何在保证线程安全的同时进行性能优化。
58 0
|
6月前
|
存储 安全 Java
深入理解Java并发编程:线程安全与锁机制
【5月更文挑战第31天】在Java并发编程中,线程安全和锁机制是两个核心概念。本文将深入探讨这两个概念,包括它们的定义、实现方式以及在实际开发中的应用。通过对线程安全和锁机制的深入理解,可以帮助我们更好地解决并发编程中的问题,提高程序的性能和稳定性。
|
3月前
|
存储 安全 Java
解锁Java并发编程奥秘:深入剖析Synchronized关键字的同步机制与实现原理,让多线程安全如磐石般稳固!
【8月更文挑战第4天】Java并发编程中,Synchronized关键字是确保多线程环境下数据一致性与线程安全的基础机制。它可通过修饰实例方法、静态方法或代码块来控制对共享资源的独占访问。Synchronized基于Java对象头中的监视器锁实现,通过MonitorEnter/MonitorExit指令管理锁的获取与释放。示例展示了如何使用Synchronized修饰方法以实现线程间的同步,避免数据竞争。掌握其原理对编写高效安全的多线程程序极为关键。
64 1
|
4月前
|
安全 Java 开发者
Java并发编程中的线程安全问题及解决方案探讨
在Java编程中,特别是在并发编程领域,线程安全问题是开发过程中常见且关键的挑战。本文将深入探讨Java中的线程安全性,分析常见的线程安全问题,并介绍相应的解决方案,帮助开发者更好地理解和应对并发环境下的挑战。【7月更文挑战第3天】
93 0
|
5月前
|
安全 Java 开发者
Java并发编程中的线程安全策略
在现代软件开发中,Java语言的并发编程特性使得多线程应用成为可能。然而,随着线程数量的增加,如何确保数据的一致性和系统的稳定性成为开发者面临的挑战。本文将探讨Java并发编程中实现线程安全的几种策略,包括同步机制、volatile关键字的使用、以及java.util.concurrent包提供的工具类,旨在为Java开发者提供一系列实用的方法来应对并发问题。
45 0
|
6月前
|
安全 Java 容器
Java一分钟之-并发编程:线程安全的集合类
【5月更文挑战第19天】Java提供线程安全集合类以解决并发环境中的数据一致性问题。例如,Vector是线程安全但效率低;可以使用Collections.synchronizedXxx将ArrayList或HashMap同步;ConcurrentHashMap是高效线程安全的映射;CopyOnWriteArrayList和CopyOnWriteArraySet适合读多写少场景;LinkedBlockingQueue是生产者-消费者模型中的线程安全队列。注意,过度同步可能影响性能,应尽量减少共享状态并利用并发工具类。
64 2

热门文章

最新文章