`
洛昱棠
  • 浏览: 1233 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
社区版块
存档分类
最新评论

多线程(并发编程)

 
阅读更多
一、程序、进程 & 线程

【程序】
即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多线程并发编程知识导图笔记.xmind

    JAVA多线程并发编程

    但同时,多线程并发也会引入一些问题,如数据竞争和同步问题。 为了解决这些问题,Java提供了多种同步机制。`synchronized`关键字用于控制对共享资源的访问,确保同一时间只有一个线程可以执行特定代码块,从而避免...

    Netty多线程并发编程

    Netty多线程并发编程知识点总结 Netty多线程并发编程是指在Netty框架中使用多线程技术来实现高性能、高并发的网络编程。下面是关于Netty多线程并发编程的知识点总结: 一、 JAVA 内存模型与多线程编程 在Java中,...

    基于Java的多线程并发编程框架gobrs-async设计源码

    该项目是采用Java编写的gobrs-async多线程并发编程框架的源码,总计包含445个文件,涵盖了242个Java源文件、47个Markdown文档、36个PNG图片、36个Vue组件、20个JavaScript文件、14个XML配置文件、13个Stylus样式表、...

    多线程并发编程在Netty的应用分析

    《多线程并发编程在Netty中的应用分析》 在当今高性能网络编程领域,Netty以其高效、灵活和易用的特性,成为了许多系统开发的首选框架。本篇内容将深入探讨多线程并发编程在Netty中的核心应用,帮助读者理解如何...

    java多线程并发编程例子

    Java多线程并发编程是Java开发中的重要领域,特别是在服务器端和高并发应用中不可或缺。`java.util.concurrent`包提供了丰富的工具类,帮助开发者更好地管理线程和优化并发性能。以下将详细介绍标题和描述中涉及的...

    java多线程并发编程 核心技术应用实践

    Java多线程并发编程是Java开发中的重要领域,它涉及到如何高效地利用计算机资源,特别是在多核处理器系统中,能够显著提升程序的执行效率。在《java多线程并发编程核心技术应用实践》中,我们将深入探讨Java平台上的...

    多线程并发编程-同步与互斥-原⼦变量-并发和⽆锁 数据结构

    多线程并发编程-同步与互斥-原子变量-并发和无锁数据结构 多线程并发编程是提高认程序性能的核心技术,但它也增加了编程的复杂性。因此,系统理解和掌握多线程并发编程的技巧变得尤为重要。本章将从多线程编程的...

    多线程并发编程在Netty中的应用分析.zip

    大致内容包括: Java内存模型 Java内存交互协议 Java的线程 Netty的并发编程分析 正确的使用锁 volatile的正确使用 CAS指令和原子类 线程安全类 读写锁的应用

    多线程并发编程参考资料

    在IT领域,多线程并发编程是不可或缺的一部分,尤其是在现代计算环境中,为了充分利用多核处理器的优势,提升程序的运行效率,开发者必须掌握这一技术。本文将深入探讨标题为"多线程并发编程参考资料"的宝典,重点...

    Java互联网架构多线程并发编程原理及实战 视频教程 下载.zip

    Java互联网架构多线程并发编程原理及实战 视频教程 下载 1-1 课程简介.mp4 1-2 什么是并发编程.mp4 1-3 并发编程的挑战之频繁的上下文切换.mp4 1-4 并发编程的挑战之死锁.mp4 1-5 并发编程的挑战之线程安全....

    Java互联网架构多线程并发编程原理及实战 视频教程 下载4.zip

    Java互联网架构多线程并发编程原理及实战 视频教程 下载 1-1 课程简介.mp4 1-2 什么是并发编程.mp4 1-3 并发编程的挑战之频繁的上下文切换.mp4 1-4 并发编程的挑战之死锁.mp4 1-5 并发编程的挑战之线程安全....

    Java互联网架构多线程并发编程原理及实战 视频教程 下载2.zip

    Java互联网架构多线程并发编程原理及实战 视频教程 下载 1-1 课程简介.mp4 1-2 什么是并发编程.mp4 1-3 并发编程的挑战之频繁的上下文切换.mp4 1-4 并发编程的挑战之死锁.mp4 1-5 并发编程的挑战之线程安全....

    Java互联网架构多线程并发编程原理及实战 视频教程 下载3.zip

    Java互联网架构多线程并发编程原理及实战 视频教程 下载 1-1 课程简介.mp4 1-2 什么是并发编程.mp4 1-3 并发编程的挑战之频繁的上下文切换.mp4 1-4 并发编程的挑战之死锁.mp4 1-5 并发编程的挑战之线程安全....

    Java互联网架构多线程并发编程原理及实战 视频教程 下载1.zip

    Java互联网架构多线程并发编程原理及实战 视频教程 下载 1-1 课程简介.mp4 1-2 什么是并发编程.mp4 1-3 并发编程的挑战之频繁的上下文切换.mp4 1-4 并发编程的挑战之死锁.mp4 1-5 并发编程的挑战之线程安全....

    Java高并发编程,构建并发编程知识体系,提升面试成功率

    本课程将结合大量图示及代码演示,带你掌握多线程并发编程(线程安全,线程调度,线程封闭,同步容器等)与高并发处理思路与手段(扩容,缓存,队列,拆分等),构建完整的并发与高并发知识体系,胜任实际开发中并发...

    Gobrs-Async 是一款功能强大、配置灵活、带有全链路异常回调、内存优化、异常状态管理于一身的高性能多线程并发编程和动态编

    Gobrs-Async 是一款功能强大、配置灵活、带有全链路异常回调、内存优化、异常状态管理于一身的高性能多线程并发编程和动态编排框架。为企业提供在复杂应用场景下动态任务编排的能力。 针对于复杂场景下,异步线程...

    在IntelliJ IDEA中多线程并发代码的调试方法详解

    在多线程并发编程中,调试是一件很复杂的事情,特别是在使用 IntelliJ IDEA 等集成开发环境时。今天,我们将详细介绍如何在 IntelliJ IDEA 中调试多线程并发代码。 在多线程并发编程中,多个线程可能会同时执行,这...

    多线程并发学习书籍

    在IT行业中,多线程并发编程是至关重要的一个领域,特别是在服务器端开发、大数据处理以及高性能计算中。这里提到的“多线程并发学习书籍”集合包含六本关于这一主题的专业书籍,覆盖了2012年至2018年的最新知识。...

    C++11的多线程并发编程(一)

    C++11的多线程并发编程(一) 在疫情期间以及未来毕业后即将工作的憧憬中,给自己立个学习flag,学习并第一次通过CSDN记录下C++11的多线程并发编程。初学者的我写的不好,还望大家多多指正与批评, 学习多线程并发...

Global site tag (gtag.js) - Google Analytics