一、程序、进程 & 线程
【程序】
即program,港台翻译为“程式”= ̄ω ̄=;
程序 = 算法 + 数据结构 ,是指令的总和,在计算机中以文件的形式保存在存储器中;
(那么问题来了~什么是算法?什么是数据结构?
算法(Algorithm),是一个计算问题的具体步骤,是程序的逻辑抽象;
数据结构(data structure),是计算机中存储、组织数据的方式;数据结构,包括逻辑结构和物理结构。
逻辑结构是客观事物自身所具有的结构特点,而逻辑结构在计算机中的具体实现则成为物理结构。)
在上图中,每一个文件夹都是一个程序。
【进程】
即process,是已经运行的程序的实体;
一个进程包括一个或多个线程;
在任务管理器中就可以看到当前的进程啦~
【线程】
即Thread,计算机中能进行运算调度的最小单位,是进程中的实际运作单位。一个进程中可以并发多个线程,
每个线程执行不同的任务。同一个进程的不同线程会共享部分资源。
※ 总的来说,就是进程是正在运行的程序,一个进程中包含一个或多个线程。就是酱~o( =•ω•= )miao~
二、顺序编程 & 并发编程
【顺序编程】
顺序编程就是在任意时刻,程序中的所有事物都只能执行一个步骤;
例如:
public static void main(String[] args) {
// TODO Auto-generated method stub
a();
System.out.println("执行主函数");
}
public static void a(){
b();
System.out.println("执行a方法");
}
public static void b(){
c();
System.out.println("执行b方法");
}
public static void c(){
System.out.println("执行c方法");
}
◤运行结果◢
执行c方法
执行b方法
执行a方法
执行主函数
◤分析◢
在这个过程中,首先从main方法开始执行,调用了a方法,所以在a方法执行完直线,不会执行到输出语句的
代码,以此类推,在执行完b方法之前,不会输出a方法中的语句。那么,如果b方法由于某些原因不能继续执
行,则a方法和c方法都不能再继续执行,整个程序都将停下来知道外界条件发生改变,造成了任务的 阻塞。
【并发编程】
并发编程,就是多线程编程,即多个线程同时并行执行,互不干扰;
并发编程,提升了程序的执行速度,同时能解决阻塞的问题。而且一个线程不能服务多个用户,执行多项任
务,那么就会造成资源的独占问题,并发编程可以同时执行多个任务。
但,并发编程也可能会造成不确定的错误。
例如:
public class MyThread implements Runnable {
public int i;
public static void main(String[] args) {
for(int i=0;i<10;i++){
MyThread mt = new MyThread(i);//创建一个新的线程
//需要先执行start方法,Runnable中没有,只有Thread中有
(new Thread(mt)).start();
}
System.out.println("main");
}
// 实现了 Rannable后,必须要重新写run方法
public void run() {
System.out.println("执行了第 "+i+" 个线程");
}
public MyThread (int i ){
this.i = i;
}
◤第一次运行结果◢
执行了第 1 个线程
执行了第 6 个线程
执行了第 0 个线程
main
执行了第 5 个线程
执行了第 8 个线程
执行了第 2 个线程
执行了第 3 个线程
执行了第 4 个线程
执行了第 7 个线程
执行了第 9 个线程
◤第二次运行结果◢
执行了第 1 个线程
执行了第 3 个线程
执行了第 0 个线程
main
执行了第 7 个线程
执行了第 6 个线程
执行了第 9 个线程
执行了第 5 个线程
执行了第 2 个线程
执行了第 8 个线程
执行了第 4 个线程
◤结果分析◢
每一个程序,jvm都为我们建了一个主线程,在这里主线程就是从mainfangfa开始执行,他要做的事情就是循
环,建立10个线程,然后输出一行语句,而那10个线程的运行情况与他无关,这10个线程各自独立运行,所
以每次的运行情况都有所不同。
三、多线程的实现
【实现Runnable接口】
Runnable中只有唯一的一个run()方法,当启动这个线程的时候,就会执行这个run()方法。同时,因为
Runnable中没有start()方法,在执行线程的时候,必须要新建一个Thread对象。
【继承Thread类】
理论上来说,继承Thread之后,并不一定要重写run()方法,但那样run()方法就为空,执行线程之后,调用
相应的run()方法,但是并没有其他实际的改变。
四、Thread的两个方法
【setPriority(int newPriority)】
设置优先级,本来以为优先级高的就一定先执行,优先级低则反之。但是,其实在这里设置优先级是没有太
大意义的,优先级高只是代表当多个线程同时处于就绪状态而去抢占CPU的时候,他先执行的概率大一点而已
(只是概率大一点啊w(゚Д゚)w,还必须是在哄抢的时候,要你何用啊摔(#‵′))
而且最终的执行顺序是由操作系统来决定的,傲娇的操作系统才不管你的优先级呢 ٩(๑❛ᴗ❛๑)۶
【sleep()】
休眠
执行时,因为可能会有异常,所以要放到try块里面,处理异常,其实我不太懂这里(逃~
try{
Thread.sleep(100);//休眠0.1秒
}
catch(Exception e){
e.printStackTrace();//异常
}
休眠可以有两个效果
一个是线程运行的太快,需要让他停下来等一等我们,比如在面板上画小球,运行得太快以至于人眼无法识
别,这时候就需要休眠了。
还有一个是对多个线程的运行顺序进行调度。
public static void main(String[] args) {
for(int i=0;i<10;i++){
MyThread mt = new MyThread(i);//创建一个新的线程
try{
sleep(1);//休眠0.001秒
}catch(Exception e){
e.printStackTrace();//处理抛出异常
}
mt.start();//执行线程
}
}
// 重新写run方法
public void run() {
System.out.println("执行了第 "+i+" 个线程");
}
◤运行结果◢
执行了第 0 个线程
执行了第 1 个线程
执行了第 2 个线程
执行了第 3 个线程
执行了第 4 个线程
执行了第 5 个线程
执行了第 6 个线程
执行了第 7 个线程
执行了第 8 个线程
执行了第 9 个线程
PS:我能不能说一句这个编辑器一点也不好用(ಥ_ಥ)~
- 大小: 4.3 KB
- 大小: 16.6 KB
分享到:
相关推荐
java多线程并发编程知识导图笔记.xmind
但同时,多线程并发也会引入一些问题,如数据竞争和同步问题。 为了解决这些问题,Java提供了多种同步机制。`synchronized`关键字用于控制对共享资源的访问,确保同一时间只有一个线程可以执行特定代码块,从而避免...
Netty多线程并发编程知识点总结 Netty多线程并发编程是指在Netty框架中使用多线程技术来实现高性能、高并发的网络编程。下面是关于Netty多线程并发编程的知识点总结: 一、 JAVA 内存模型与多线程编程 在Java中,...
该项目是采用Java编写的gobrs-async多线程并发编程框架的源码,总计包含445个文件,涵盖了242个Java源文件、47个Markdown文档、36个PNG图片、36个Vue组件、20个JavaScript文件、14个XML配置文件、13个Stylus样式表、...
《多线程并发编程在Netty中的应用分析》 在当今高性能网络编程领域,Netty以其高效、灵活和易用的特性,成为了许多系统开发的首选框架。本篇内容将深入探讨多线程并发编程在Netty中的核心应用,帮助读者理解如何...
Java多线程并发编程是Java开发中的重要领域,特别是在服务器端和高并发应用中不可或缺。`java.util.concurrent`包提供了丰富的工具类,帮助开发者更好地管理线程和优化并发性能。以下将详细介绍标题和描述中涉及的...
Java多线程并发编程是Java开发中的重要领域,它涉及到如何高效地利用计算机资源,特别是在多核处理器系统中,能够显著提升程序的执行效率。在《java多线程并发编程核心技术应用实践》中,我们将深入探讨Java平台上的...
多线程并发编程-同步与互斥-原子变量-并发和无锁数据结构 多线程并发编程是提高认程序性能的核心技术,但它也增加了编程的复杂性。因此,系统理解和掌握多线程并发编程的技巧变得尤为重要。本章将从多线程编程的...
大致内容包括: Java内存模型 Java内存交互协议 Java的线程 Netty的并发编程分析 正确的使用锁 volatile的正确使用 CAS指令和原子类 线程安全类 读写锁的应用
在IT领域,多线程并发编程是不可或缺的一部分,尤其是在现代计算环境中,为了充分利用多核处理器的优势,提升程序的运行效率,开发者必须掌握这一技术。本文将深入探讨标题为"多线程并发编程参考资料"的宝典,重点...
Java互联网架构多线程并发编程原理及实战 视频教程 下载 1-1 课程简介.mp4 1-2 什么是并发编程.mp4 1-3 并发编程的挑战之频繁的上下文切换.mp4 1-4 并发编程的挑战之死锁.mp4 1-5 并发编程的挑战之线程安全....
Java互联网架构多线程并发编程原理及实战 视频教程 下载 1-1 课程简介.mp4 1-2 什么是并发编程.mp4 1-3 并发编程的挑战之频繁的上下文切换.mp4 1-4 并发编程的挑战之死锁.mp4 1-5 并发编程的挑战之线程安全....
Java互联网架构多线程并发编程原理及实战 视频教程 下载 1-1 课程简介.mp4 1-2 什么是并发编程.mp4 1-3 并发编程的挑战之频繁的上下文切换.mp4 1-4 并发编程的挑战之死锁.mp4 1-5 并发编程的挑战之线程安全....
Java互联网架构多线程并发编程原理及实战 视频教程 下载 1-1 课程简介.mp4 1-2 什么是并发编程.mp4 1-3 并发编程的挑战之频繁的上下文切换.mp4 1-4 并发编程的挑战之死锁.mp4 1-5 并发编程的挑战之线程安全....
Java互联网架构多线程并发编程原理及实战 视频教程 下载 1-1 课程简介.mp4 1-2 什么是并发编程.mp4 1-3 并发编程的挑战之频繁的上下文切换.mp4 1-4 并发编程的挑战之死锁.mp4 1-5 并发编程的挑战之线程安全....
本课程将结合大量图示及代码演示,带你掌握多线程并发编程(线程安全,线程调度,线程封闭,同步容器等)与高并发处理思路与手段(扩容,缓存,队列,拆分等),构建完整的并发与高并发知识体系,胜任实际开发中并发...
Gobrs-Async 是一款功能强大、配置灵活、带有全链路异常回调、内存优化、异常状态管理于一身的高性能多线程并发编程和动态编排框架。为企业提供在复杂应用场景下动态任务编排的能力。 针对于复杂场景下,异步线程...
在多线程并发编程中,调试是一件很复杂的事情,特别是在使用 IntelliJ IDEA 等集成开发环境时。今天,我们将详细介绍如何在 IntelliJ IDEA 中调试多线程并发代码。 在多线程并发编程中,多个线程可能会同时执行,这...
在IT行业中,多线程并发编程是至关重要的一个领域,特别是在服务器端开发、大数据处理以及高性能计算中。这里提到的“多线程并发学习书籍”集合包含六本关于这一主题的专业书籍,覆盖了2012年至2018年的最新知识。...
C++11的多线程并发编程(一) 在疫情期间以及未来毕业后即将工作的憧憬中,给自己立个学习flag,学习并第一次通过CSDN记录下C++11的多线程并发编程。初学者的我写的不好,还望大家多多指正与批评, 学习多线程并发...