Java------------------------------多线程

Python与numpy版本兼容性排查指南 本文详细解析了Python与numpy版本兼容性问题,提供了快速诊断和解决版本冲突的实用方法。通过查看版本信息、使用官方兼容性对照表以及降级或升级环境等方案,帮助开发者有效避免常见的报错问题,如'ImportError'和'AttributeError'。文章还介绍了使用虚拟环境和requirements.txt等工程实践,确保项目依赖的稳定性。 阅读详情

 

目录

一,程序,进程,线程理解

二,创建多线程的方法

三,Thread类常用方法

 四,线程安全与通信

五,消费者与生产者案例


一,程序,进程,线程理解

1) 程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。
2)进程(process)是程序的一次执行过程, 或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。
➢如:运行中 的QQ,运行中的MP3播放器
➢程序是静态的,进程是动态的
➢进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域
3)线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。

➢若一个进程同一时间并行执行多个线程,就是支持多线程的
➢线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小
➢一个进程中的多个线程共享相同的内存单元/内存地址空间→它们从同一堆中分配对象,可以访问相同的变量和对象。这就使得线程间通信更简便、高效。但多个线程操作共享的系统资源可能就会带来安全的隐患。

二,创建多线程的方法

 方式一:

继承与Thread类
* 1,创建一个继承与Thread类的子类
* 2,重写Thread类的run()方法将此线程执行的操作声明在run()方法体中
* 3,创建子类对象
* 4,通过此对象调用start()方法
public class ChuangJianFangShi1 {
    //1,创建一个继承与Thread类的子类

    static class MyThread extends Thread {
        //如果有变量(属性)后面需要共享需要加static
        //2,重写Thread类的run()方法将此线程执行的操作声明在run()方法体中

        public void run() {
            for (int i = 0; i < 100; i++) {
                if (i % 2 == 0) {
                    System.out.println(i);
                }
            }
        }
    }
    public static void main(String[] args) {
        //标准方法

     /*   // 3,创建子类对象
        MyThread myThread = new MyThread();

        //4,通过此对象调用start()方法
        myThread.start();*/

        //匿名方法
        new Thread() {
            public void run() {
                for (int i = 0; i < 100; i++) {
                    if (i % 2 == 0) {
                        System.out.println(i);
                    }
                }
            }
        }.start();
    }
}

 方式二:

实现Runnable接口
public class ChuangJianFangShi2 {

    //例买票窗口,没有考虑线程安全问题

    //1,创建一个实现Runnable接口的类
    static class Window implements Runnable{
         private int num = 100;//如果用第一种方法要加static
    //2,实现类实现Runnable接口中的抽象方法
        @Override
        public void run() {
           while (true){
               if (num > 0){
                   System.out.println(Thread.currentThread().getName() + "票号为" + num);
                   num--;
               }else {
                   break;
               }
           }
        }
    }


    public static void main(String[] args) {
         //3,创建实现类对象
        Window window = new Window();//如果用第一种方法需要创多个对象
        //4,将此对象作为参数传递到Thread类的构造器中,创建Thread类对象
        Thread t1 = new Thread(window);
        Thread t2 = new Thread(window);
        Thread t3 = new Thread(window);
        //设置线程名字
        t1.setName("窗口一");
        t2.setName("窗口二");
        t3.setName("窗口三");

        //5,通过Thread类的对象调start方法
        t1.start();
        t2.start();
        t3.start();


    }




}

 方式三:

实现Callable接口

方式四:

使用线程池

三,Thread类常用方法

* Thread类中的方法
* start():启动当前线程,调用run()方法
* run():通常需重写
* currentThread():静态方法,返回执行当前代码的线程(Thread.currentThread.其他类中的方法)
* getName():获取当前线程名字
* setName():设置当前线程名字
* yield():释放当前线程执行权
* join:满足当前线程执行条件停止执行执行其他一个线程其他一个线程执行完毕后在执行当前线程
* 理解2::在线程a中调用线程b的join方法,此线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态、
*sleep():静态方法可以直接用类去调:让当前线程睡眠指定的毫秒数在
* isAlive():判断当前线程是否还存活
* 如何获取和设置线程的优先级
* 在线程名字后面+Thread.currentThread().getPriority()
*在start()方法之前设置调用方法setPriority()

 四,线程安全与通信

出现原因:当某个线程操作时,还没完成,其他线程就参与进来了,也进行操作
解决:当某个线程操作时,还没完成,就阻止其他线程参与进来了

解决方法: 

 方法一:同步代码快
* synchronized(同步监视器){
*     需要被同步的代码
* }
* 说明:操作共享数据的代码及为需要被同步的代码
*      共享数据:多个线程共同操作的变量
*      同步监视器:俗称锁,可以是任何一个类的对象,都可以充当锁
*      例如:Object obj = new Object();  继承方式要加static:   static Object obj = new Object();
*      要求:多个线程必须要共同用同一把锁
*      实现方式:this
*      继承方式:类.class
*
* 方法二:同步方法
* 把需要被同步的代码写成一个方法然后在run()方法里调用
*
* 方法三:Lock锁
线程通信
* wait();一个线程进来阻塞一下,实现多个线程交替工作
* notify();
* notifyAll();解除阻塞,实现多个线程交替工作
* 是定义在Obj类中的方法
* 必须使用在同步代码块或同步方法中的同步监视器。lock解决线程安全时不能用
public class XianChengAnQuan {
    //例买票窗口,考虑线程安全问题,实现多个线程交替工作分配均匀



    //1,创建一个实现Runnable接口的类

    static class Window implements Runnable{
        //Object object = new Object();
        //static Object object = new Object(); :如果用继承的方法需要这样写
        private int num = 100;//如果用第一种方法要加static
        //2,实现类实现Runnable接口中的抽象方法
        @Override
        public void run() {
            while (true){
                synchronized (this){//如果用继承的方法:类.class
                    notifyAll();//解除阻塞,实现多个线程交替工作
                    if (num > 0){
                        try {
                            Thread.sleep(100);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread().getName() + "票号为" + num);
                        num--;
                        try {
                            wait();//一个线程进来阻塞一下,实现多个线程交替工作
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }else {
                        break;
                    }
                }
            }
        }
    }


    public static void main(String[] args) {
        //3,创建实现类对象
        Window window = new Window();//如果用第一种方法需要创多个对象
        //4,将此对象作为参数传递到Thread类的构造器中,创建Thread类对象
        Thread t1 = new Thread(window);
        Thread t2 = new Thread(window);
        Thread t3 = new Thread(window);
        //设置线程名字
        t1.setName("窗口一");
        t2.setName("窗口二");
        t3.setName("窗口三");

        //5,通过Thread类的对象调start方法
        t1.start();
        t2.start();
        t3.start();
    }

五,消费者与生产者案例

 

package com.bdqn.lianxi.duoxaincheng.xiaofeizheshengcanzhe;

public class DianYuan {

    private int num = 0;
    //生产产品
    public synchronized void shengcan(){

        if (num < 20){
            num++;
            System.out.println(Thread.currentThread().getName() + "开始生产第" + num + "个产品");
            notify();
        }else {
            //等待
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }


    }

    //消费产品
    public synchronized void xaiofei(){

        if (num > 0){
            System.out.println(Thread.currentThread().getName() + "开始消费第" + num + "个产品");
            num--;
            notify();
        }else {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }


}
package com.bdqn.lianxi.duoxaincheng.xiaofeizheshengcanzhe;

public class ShengChanZhe extends Thread{

    private DianYuan dianYuan;

    public ShengChanZhe(DianYuan dianYuan) {
        this.dianYuan = dianYuan;
    }

    @Override
    public void run() {
        System.out.println(getName() + "开始生产品");

        while (true){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            dianYuan.shengcan();


        }


    }


}

 

package com.bdqn.lianxi.duoxaincheng.xiaofeizheshengcanzhe;

public class XiaoFeiZhe extends Thread{

    private DianYuan dianYuan;

    public XiaoFeiZhe(DianYuan dianYuan) {
        this.dianYuan = dianYuan;
    }


    @Override
    public void run() {

        System.out.println(getName() + "开始消费产品");

        while (true){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

           dianYuan.xaiofei();
        }
    }
}

 

package com.bdqn.lianxi.duoxaincheng.xiaofeizheshengcanzhe;

public class Test {

    public static void main(String[] args) {
        DianYuan dian = new DianYuan();

        ShengChanZhe sheng = new ShengChanZhe(dian);

        sheng.setName("生产者一");

        XiaoFeiZhe xiao = new XiaoFeiZhe(dian);

        xiao.setName("消费者一");

        sheng.start();
        xiao.start();

    }



}

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

package com.bdqn.lianxi.duoxaincheng.work;

public class Run implements Runnable{

    private int num = 10;


    private boolean isTrue = false;
    @Override
    public void run() {

        while (!isTrue){
            people();
        }

    }

    public synchronized void people(){
        if (num == 0){
            isTrue = true;
            return;
        }
        notify();
        System.out.println(Thread.currentThread().getName() + "号选手拿到接力棒");
        num--;

        for (int i = 0;i < 10;i++ ){
            System.out.println(Thread.currentThread().getName() + "号选手跑了" + (i + 1) * 10 + "米");
        }
        try {
            wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }






    public static void main(String[] args) {
       Run run = new Run();
       Thread thread = new Thread(run);
       Thread thread1 = new Thread(run);
       Thread thread2 = new Thread(run);
       Thread thread3 = new Thread(run);

       thread.setName("1");
       thread1.setName("2");
       thread2.setName("3");
       thread3.setName("4");

       thread.start();
       thread1.start();
       thread2.start();
       thread3.start();



    }
}

 

保姆级教程:在LKD3588开发板上为RK3588添加SC2210摄像头驱动(含完整DTS配置) 本文提供了一份详细的教程,指导如何在LKD3588开发板上为RK3588处理器添加SC2210摄像头驱动,包括完整的DTS配置和内核编译步骤。教程涵盖了环境准备、驱动文件添加、DTS配置详解、内核编译与烧录、驱动测试以及常见问题排查,帮助开发者快速实现SC2210传感器在RK3588平台上的集成与优化。 阅读详情

相关推荐

想在瑞芯微RK3588上跑视频分类模型?避开3D卷积这个坑,试试这几种NPU友好的方案

本文探讨了在瑞芯微RK3588上部署视频分类模型时如何避开3D卷积的性能陷阱,提供了三种NPU友好的替代方案:MobileNetV2+GRU组合、Temporal Shift Module(TSM)和帧级池化。这些方案在保持较高准确率的同时,充分利用RKNPU的硬件加速能力,显著提升推理效率。文章还分享了从模型转换到部署优化的完整流程和实战经验。

weixin_28724319的博客 418

Java技术——Java多线程学习

0.前言 转载请标明出处:http://blog.youkuaiyun.com/seu_calvin/article/details/52400927 学习多线程之前需要先了解以下几个概念。 进程:一般指一个程序运行时的实例,每个进程有自己独立的地址空间。一个进程无法直接访问另一个进程的数据。 线程:是CPU调度的最小单元,一个进程可以有很多线程,每条线程可以并行执行不同的任务。并且每个线程有独立的运...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 1万+

网络安全面试题

在当今社会网络安全行业越来越发达,也有越来越多的人去学习,为了更好地进行工作,除了学好知识外还要应对企业的面试。 所以在这里我归总了一些网络安全方面的常见面试题,希望对大家有所帮助。 windows常见 1:描述tcp/udp的区别及优劣,及其发展前景 TCP—传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能...

fzx_hsaj的博客 6万+

Java 多线程详解

多线程(Multithreading)是指在一个程序中同时执行多个线程的能力。线程是进程中的一个执行路径,多线程允许程序在同一时间内执行多个操作。Java 中的多线程可以通过并发处理来提高程序的性能和响应速度,尤其在处理复杂计算、大量 I/O 操作或并发任务时非常有用。多线程使得程序可以同时执行多个任务,充分利用CPU资源,提升程序性能,增强响应性,并简化程序的复杂度。尽管多线程编程带来了一些挑战,如线程安全和死锁问题,但合理设计和使用多线程可以显著改善程序的整体表现。

goTsHgo的博客 2040

FICO F.27 Customer statement 打印

需求,定制化打印,替换标准的F.27打印 类似于采购订单的打印,但是略有不同,查阅资料之后步骤如下: T-code F.27 is SAP standard program to produce customer/vendor correspondence (letter). Correspondence Type is used to specify the related printing program and form for the particular correspondence. SAP

IamRunjiang的博客 1965

【ORB_SLAM系列4】—— 一文搞定如何在Ubuntu20.04中安装运行ORB_SLAM3(包含ROS版本和非ROS版本)

ORB-SLAM3是一款基于特征点的实时单目SLAM系统,是SLAM领域的研究热点之一。它的核心算法是结合了ORB特征点提取和描述子匹配、单目RGB相机的深度估计、运动估计和地图优化等步骤,能够在实时性和精度之间取得平衡,适用于各种环境下的定位和建图任务。在各种应用领域都有广泛的应用。本教程主要是介绍了关于在ubuntu20.04中运行ORB_SLAM3的所有依赖的库的安装过程,和所遇到的一些报错的解决方法。有什么问题,可以评论区里面交流讨论

2401_82458959的博客 5039

【Java多线程】Java多线程技能

到 1. 进程和多线程的概念及线程的优点 提到多线程这个技术就不得不提及“进程”这个概念,在“百度百科”中对进程的解释如下: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 进程是受操作系统管理的基本运行单元。 那什么是线程呢? 线程可以理解成是在

一定要站在自己热爱的生活里闪闪发光 4万+

提示词注入攻击全面解析与防御策略

提示词注入(Prompt Injection)是指攻击者通过精心构造的输入内容,操纵或欺骗AI系统执行非预期行为的技术手段。这种攻击类似于传统的SQL注入或XSS攻击,但其目标是AI模型的提示词处理机制而非数据库或网页。提示词注入利用了大语言模型的一个基本特性:它们被设计为遵循指令。攻击者通过在用户输入中嵌入特定指令,试图覆盖或绕过系统原有的安全限制和行为规则,让模型执行本不应该执行的操作。深度防御:实施多层次防御策略,不依赖单一安全措施持续更新:随着攻击技术的发展不断更新防御措施安全设计优先。

免责声明:本资料部分整理自合法网络公开渠道,部分为个人学习积累成果,仅作学习参考、学术交流使用。所收费用仅为资料搜集整理的时间劳务酬劳。版权归原作者及出版方所有,本人不承担相关版权及内容法律责任,若有侵权请告知,即刻删除处理。 4208

java多线程

在计算机中,我们把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类似的,音乐播放器和Word都是进程。某些进程内部还需要同时执行多个子任务。例如,我们在使用Word时,Word可以让我们一边打字,一边进行拼写检查,同时还可以在后台进行打印,我们把子任务称为线程。进程和线程的关系就是:一个进程可以包含一个或多个线程,但至少会有一个线程。操作系统调度的最小任务单位其实不是进程,而是线程。

m0_60301012的博客 775

C#调用Halcon程序三种方法

C#调用Halcon程序三种方法 1.halcon导出C#文件,在C#里面调用 2.在C#里面使用Halcon引擎调用Halcon程序 3.在C#里面使用Halcon引擎调用.hdev下本地函数或者.hdvp外部函数 Halcon引擎手册:C:/Program Files/MVTec/HALCON-21.11-Progress/doc_en_US/html/manuals/programmers_guide/programmers_guide_0120.html 1.导出C#(代码我只给出类,需要调用)

A541925504的博客 1万+

贝叶斯时空模型-INLA-4

该文章中,会简化数学计算的过程,主要是针对,在有数据的基础上,如何应用贝叶斯时空模型,找出影响因素,绘制时间变化的空间分布预测图。上述中关键一步与前几期介绍的不一样的地方是,我们加入了n.group参数,用来指定年份,先看一下Year有多少年的,然后封装在s.index里面。在前述的内容中,我们介绍了,如何处理空间的数据,利用海拔高度预测降雨量的例子。建立好数据及mesh以后,我们现在写INLA公式,如果不考虑残差项,那就是固定效应,现在我们增加残差项,及空间与时间效应。这里的Mesh设定值为10,20。

学习中 2948

Java多线程

Java多进程,多线程编程,如何创建线程,线程启动中断等待,了解各种线程状态,线程安全以及如何解决线程安全问题,锁的作用,以及如何加锁,了解死锁怎么出现,如何解决死锁问题

Coding经历 1424

斯坦福大学3D点云模型下载

本文整理了斯坦福大学10个经典的点云(pcd)及其模型(ply),方便日后使用,欢迎免费下载!

孙悟空 7733

JAVA多线程是什么

一、 什么是多线程: 我们现在所使用操作系统都是多任务操作系统(早期使用的DOS操作系统为单任务操作系统),多任务操作指在同一时刻可以同时做多件事(可以同时执行多个程序)。 多进程:每个程序都是一个进程,在操作系统中可以同时执行多个程序,多进程的目的是为了有效的使用CPU资源,每开一个进程系统要为该进程分配相关的系统资源(内存资源) 多线程:线程是进程内部比进程更小的执行单元(执行流|程序片段),每个线程完成一个任务,每个进程内部包含了多个线程每个线程做自己的事情,在进程中的所有线程共享该进程的资源; 主

qq_45022104的博客 4446

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java多线程是什么_Java多线程是什么

本篇文章将介绍一下多线程和其实例。Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程 序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线 程来运行。一般常见的Java应用程序都是单线程的。比如,用java命令运行一个最简单的Hello...

weixin_33050129的博客 377

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java中多线程技术

最近由于工作的原因开始决定系统学习一下Java的多线程机制。Java语言的一大特点就是内在支持多线程,这和很多语言需要通过外部开发包来实现多线程有本质区别。每个程序都有一个主线程,当程序启动时自动执行。关于多线程的一些概念性东西,见这篇博文:多线程初步。

晓风残月xj 1421

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JAVA 的多线程浅析

JAVA 的多线程浅析                                                                                  作者:马光晖一 JAVA 语言的来源、及特点在这个高速信息的时代,商家们纷纷把信息、产品做到Internet国际互连网页上。再这些不寻常网页的背后,要属功能齐全、安全可靠的编程语言,Java是当之无愧的

解惑 2514

java多线程应用_Java多线程的应用总结

多线程的好处:在java中通常每一个任务称为一个线程,但是多线程实现一个程序同时执行多个任务。直接了当的说多线程可以把任务分块执行,分块后可以同时进行而不用等待。 如下载文件,浏览网站时加载图片,通过多线程就可以实现多文件下载,一下做好几个工作,这样效率更高,线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实...

weixin_31081671的博客 774

[java多线程][java] java多线程拼接字符串

前言: 看到一个java多线程拼接字符串的题,所以就来写一下。 题目描述 Java多线程 时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 设计三个线程,三个线程并行执行,要求分别在控制台输入数据后面拼接"_A","_B","_C",并且需要保证线程1,线程2,线程3按顺序执行,即线程1执行完成后,再执...

qq_39397165的博客 1370

java多线程原理_Java中多线程原理详解

Java是少数的集中支持多线程的语言之一,大多数的语言智能运行单独的一个程序块,无法同时运行不同的多个程序块,Java的多线程机制弥补了这个缺憾,它可以让不同的程序块一起运行,这样可以让程序运行更加顺畅,同时也达到了多任务处理的目的。一、线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是程序的一个动态执行过程,是指一个内存中运行的应用程序,每个进程都有自己独立的一...

weixin_33241808的博客 1095

java多线程 cpu分配_java多线程总结(转载)

Java 多线程编程总结-------------------------------------------------------------------------------------------------下面的内容是很早之前写的,内容不够充实,而且是基于Java1.4的内容,Java5之后,线程并发部分扩展了相当多的内容,因此建议大家看 上面的系列文章的内容,与时俱进,跟上Java发...

weixin_39588983的博客 1604

java多线程总结

如果你的代码在多线程下执行和在单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的。【回答】这里可以举例说明不安全的一个实例,就是多线程处理共享数据比如仅剩一张票时,多线程操作会造成重复卖票情况。也就是说在多线程环境中,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。

lalajh的博客 395

java 多线程机制_Java多线程机制——多线程概述

本文概述本篇文章将分四块内容对Java中的多线程机制进行介绍:一. 多线程概述二. 实现多线程的两种方式三. 多线程的生命周期四. 线程调度和控制一. 线程与进程的概述线程是依赖于进程而存在的,因此在讨论线程之前,我们必须要知道什么是进程1. 什么是进程进程就是正在运行的程序,是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。当我们打开电脑资源管理器时,就可以显示当前正...

weixin_33034651的博客 572

java多线程实例java,java线程,java多线程实例

java线程,java多线程实例线程的概念:几乎每种操作系统都支持进程的概念 ----进程就是在某种程度上互相隔离的、独立运行的程序。 进程---程序之间轮询利用CPU时间。 进程是CPU任务。 线程---程序内部,轮询利用程序得到的执行时间。线程是某个程序的任务。 多进程(Multi-Thread)扩展了多进程(Multi-Process)操作的概念,将任务的划分下降到了程序级别,使得各...

weixin_39646084的博客 115

java多线程技术_Java多线程技术

多线程编程一直是学员们比较头痛和心虚的地方,因为线程执行顺序的不可预知性和调试时候的困难,让不少人在面对多线程的情况下选择了逃避,采用单线程的方式,其实只要我们对线程有了明确的认识,再加上java内置的对多线程的天然支持,多线程编程不再是一道难以逾越的鸿沟。进程、线程、并发执行首先我们先来认识一下进程、线程、并发执行的概念:一般来说,当运行一个应用程序的时候,就启动了一个进程,当然有些会启动多个进...

weixin_30111277的博客 219
上一篇: Java集合框架和泛型
下一篇: Java---------------------Io流
lhjava1234
博客等级 码龄4年 4粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值