1、程序
在结构上,程序是数据结构加算法再加上相应代码构成的,但是在计算机中程序是以文件形式保存在磁盘等存储器中,说白了就是01串,尚未启动的程序就是个文件,和视频音频文件没有多少区别。
比如电脑中的一个单机游戏(解压直接运行)
整个文件夹内的内容就是一个程序
2、进程
进程是指执行中的程序,计算机中每个进程由操作系统分配相应的系统资源执行,进程是系统资源分配的基本单位
我在写这篇博客的时候是边听音乐边打字,我听音乐用的播放器“多米音乐”此时在运行,这就是一个进程
可以看到同一个程序在运行的时候会产生一个或多个进程,进程间通信是通过共享内存与消息传递两种方式实现,这个在操作系统课程中学习到。
3、线程
进程是由一个或多个线程组成的,线程是CPU分配的基本单位,每个线程执行时相互独立
打个比方:多米音乐播放器在运行的时候播放音乐是一个进程,而在播放音乐的同时我想向播放器添加一首我很喜欢的本地的一首歌,此时我就可以执行相应的操作,把本地的那首歌添加到播放器队列中,那么播放音乐的线程与添加音乐到播放器列表就是不同的两个线程,而它们在执行时又不互相干扰,一个进程的子线程是共享该进程的全局变量的,每个线程在创建的时候会在进程的堆栈段中分配资源给各个线程。
4、顺序编程与并发编程
下面看一个顺序编程的例子:
public static void main(String[] args) { for(int i=0; i<10; i++) { print(i); } } public static void print(int i) { System.out.println("第" + (i + 1) + "个数字"); }
结果:
第1个数字
第2个数字
第3个数字
第4个数字
第5个数字
第6个数字
第7个数字
第8个数字
第9个数字
第10个数字
程序运行分析:程序在运行的时候JVM会启动该程序的一个进程,这个进程就是整个程序的父进程,父进程找到main方法,创建一个线程开始执行main中的代码,当执行到for循环时每次循环父线程会执行相应的方法,然后再再执行后续代码,在这个过程中,如果在执行到第5次循环的时候有一个I/O要求,那么在I/O请求没有完成之前,整个循环就会停在第5次循环那里一直等待,也就是顺序编程会造成“阻塞”
下面看一个并发编程的例子:
public class Threadddd implements Runnable { private static int count; public static void main(String[] args) { for(int i=0; i<10; i++) { Runnable t = new Threadddd(); Thread thread = new Thread(t); thread.start(); } System.out.println("父线程结束"); } public void run() { System.out.println("第" + (++count) + "个数字"); } }
程序输出结果:
第2个数字
第4个数字
第1个数字
第6个数字
第3个数字
第7个数字
第5个数字
父线程结束
第9个数字
第8个数字
第10个数字
再运行一次,程序输出结果:
第2个数字
第5个数字
第4个数字
第6个数字
第7个数字
第3个数字
第1个数字
第8个数字
父线程结束
第9个数字
第10个数字
程序运行分析:每次执行循环时父进程都会创建一个新的子线程并启动子线程,而子线程何时执行跟父线程毫无关系,父线程是指父进程在main开始时创建的线程,从结果可以看到子进程是各自独立完成的,当整个进程中的所有线程全部执行完以后整个进程结束。
5、多线程实现:
方式一:实现Runnable接口,重写Runnable接口中唯一的方法run()方法,但是线程在执行时要利用Thread的start来启动,实现方式同上面多线程的例子
方式二:继承Thread类并重写Thread类中的run()方法
相关推荐
最后,Java并发库还包含了很多其他有用的工具,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)用于多线程间的协作,以及Lock接口及其实现如...
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多...通过不断学习和实践,我们可以编写出高效、安全的多线程并发程序。
Java多线程与并发编程是Java开发中至关重要的一部分,它涉及到如何高效地利用CPU资源,以实现程序的并行执行。在操作系统层面,多任务和多进程是通过分配不同的内存空间来实现的,而线程则共享同一进程的内存,这...
Java 高并发多线程编程系列案例代码 & 教程 & 面试题集锦! !! 包括但不限于线程安全性, atomic包下相关类、CAS原理、Unsafe类、synchronized关键字等的使用及注意事项,
总之,掌握Java多线程的生命周期、创建、启动、同步以及线程池的使用是编写高效、稳定并发程序的基础。理解这些知识点对于解决并发编程中的问题,比如资源竞争、死锁、线程安全性等问题,至关重要。在实际开发中,...
Java并发多线程是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类、`Runnable`接口以及`ExecutorService`来实现。下面我们将深入探讨...
java多线程并发的在新窗口
JAVA并发多线程面试问题及答案 JAVA并发多线程是Java技术面试中面试官比较喜欢问的问题之一。在这里,我们将从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题...
Java并发编程是Java开发中的重要领域,涉及到多线程、线程安全以及系统性能优化等多个方面。本学习总结将深入探讨并发容器、同步容器、同步工具、死锁、异常处理、线程中断、线程池、返回结果以及同步方法等核心概念...
本资源"JUC代码收集,java高并发多线程学习"显然是一个专注于探讨和学习JUC库的资料包。 JUC库包含多个子包,如`concurrent`, `atomic`, `locks`等,每个子包都有其特定的功能和用途: 1. **concurrent**:这是JUC...
本文将详细探讨如何利用Java的多线程技术和线程池来实现并发查询数据库,以及相关的文件`BatchDataUtil.java`和`BatchDataRunnable.java`可能涉及的关键知识点。 ### 1. 多线程并发查询 多线程并发查询允许我们将一...
### CoreJava多线程学习总结 #### 一、基本概念 多线程是现代软件开发中非常重要的一个概念,尤其在Java这样的高级编程语言中,它使得程序能够更高效地利用计算机资源,实现并发处理任务。为了更好地理解CoreJava...
最后,Java并发编程还涉及线程池的使用,通过预先创建一定数量的线程,避免频繁创建和销毁线程带来的开销。`ExecutorService`是线程池的接口,可以使用`Executors`工厂类创建不同类型的线程池,如固定大小线程池、可...
并发库高级应用\多线程\Java
Java并发编程是Java开发中的重要领域,特别是在高并发、高性能的应用场景中不可或缺。并发编程能够有效地利用多核处理器资源,提高程序的运行效率,优化系统性能。以下将详细阐述Java并发编程的一些关键知识点。 ...
Java并发编程学习笔记,研究JAVA并发多线程编程的一本教程,使用并发技术可以开发出并行算法,充分利用多处理器的计算能力,避免硬件资源浪费。目前,在JAVA并发编程方面的论述系统且内容详实的技术资料不太多,Java...
Java多线程是Java编程中的一个核心概念,它在现代软件开发中扮演着至关重要的角色。...通过深入学习和实践上述Java多线程的知识点,开发者能够构建出高效、稳定、可控的多线程程序,满足各种复杂的并发需求。