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 模拟线程并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发
JAVA多线程与并发学习总结.pdf
Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程Java 并发性和多线程
Java 线程系列博文总结word化,编目如下,欢迎互相学习交流: Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:...
超实用的Java并发多线程教程
详细的讲述了多线程的各种用法 Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠...
Java 高并发多线程编程系列案例代码 & 教程 & 面试题集锦! !! 包括但不限于线程安全性, atomic包下相关类、CAS原理、Unsafe类、synchronized关键字等的使用及注意事项,
JUC代码收集,java高并发多线程学习
代码里面包含一个并发4个线程同时运行 全部开始 全部停止 单个停止还有点问题。 还有生产者消费者 里面的里面能帮助你理解多线程的运用!
java多线程并发的在新窗口
对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同...
适用人群:适合想了解或学习高并发多线程的 IT 学生、开发人员、研究人员以及使用Java多线程进行开发的任何人。 能学到什么:常见Java高并发多线程面试问题及在相关场景下如何处理和解决这些问题。 阅读建议:通过...
Java 多线程与并发编程总结.doc
并发库高级应用\多线程\Java
JAVA并发多线程的面试问题及答案-java多线程并发面试题.docx
Java并发编程学习笔记,研究JAVA并发多线程编程的一本教程,使用并发技术可以开发出并行算法,充分利用多处理器的计算能力,避免硬件资源浪费。目前,在JAVA并发编程方面的论述系统且内容详实的技术资料不太多,Java...
java多线程与高并发java多线程与高并发java多线程与高并发
java多线程并发查询数据库,使用线程池控制分页,并发查询。
Java+多线程与并发编程总结.doc