浅谈Java多线程

浅谈Java中的多线程 为什么需要使用多线程: 在单线程程序中,程序在完成当前指令前就不能做一件事。 举个例子:小王是个单线程的人,有一天,他在接水喝,但是水龙头不出水,小王就只能一直等,等到水杯装满为止才会去做下一件事,比如给自来水公司打电话投诉。 而小李是个多线程的人,他也要接水喝,但是水龙头也一样不出水,于是小李发现这件事花的时间太长了,就去做另一件事,比如写优快云博客,一边等水龙头出水。 从上面的例子可以看得出,多线程比起单线程可以做更多的事情,譬如同时处理多个任务(如果有多个逻辑处理器的话)。就算只有一个逻辑处 阅读详情

       学习目标,我们要弄明白线程是什么?为什么要用线程?线程和进程的区别和联系?线程为什么有用以及怎么开始编写使用线程的简单程序。

       何为线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。那多线程呢?

       多线程:在同一应用程序中有多个顺序流(同时)执行。

       进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1--n个线程。几乎每种操作系统都支持进程的概念 ―― 进程就是在某种程度上相互隔离的、独立运行的程序。线程化是允许多个活动共存于一个进程中的工具。

       多进程:在操作系统中能(同时)运行多个任务(程序)。

       为什么要用线程:每个 Java 程序都至少有一个线程 ― 主线程。使用线程的好处有1.使 UI 响应更快,2.利用多处理器系统,3.简化建模,4.执行异步或后台处理,5.更重要的是它能给用户一个好的体验。还值得注意的是,线程不是多多益善,任何事都会过犹不及,虽然线程可以大大简化许多类型的应用程序,过度使用线程可能会危及程序的性能及其可维护性。线程消耗了资源。因此,在不降低性能的情况下,可以创建的线程的数量是有限制的。尤其在单处理器系统中,使用多个线程不会使主要消耗 CPU 资源的程序运行得更快。

       线程和进程的区别和联系:线程和进程一样分为五个阶段:创建、就绪、运行、阻塞、终止。有时候,线程也称作轻量级进程。就象进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。但是,与分隔的进程相比,进程中的线程之间的隔离程度要小。它们共享内存、文件句柄和其它每个进程应有的状态。进程可以支持多个线程,它们看似同时执行,但互相之间并不同步。

       线程的使用:在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。

       创建线程的方法1:定义一个线程类继承Thread并重写其中的方法run(),方法run()称为线程体。由于java只支持单继承,用这种方法定义的类不能再继承其他的类。

package com.example;

public class MyClass {
    public static void main(String args[]){
        //生成线程类对象
        MyThread myThread=new MyThread();
        //启动线程
        myThread.start();
//        myThread.run();//千万不要这样启动线程
    }
}
 //创建一个类继承Thread
 class MyThread extends Thread{
     @Override
     public void run() {//线程体
         for (int i=0;i<50;i++){
             System.out.println("Thread"+i);
         }
     }
 }

这是单线程,接下来我们看下多线程,很简单,在上面的main方法中也来个for循环就行。

package com.example;

public class MyClass {
    public static void main(String args[]){
        //生成线程类对象
        MyThread myThread=new MyThread();
        //启动线程
        myThread.start();
//        myThread.run();//千万不要这样启动线程
        for (int i=0;i<50;i++){
            System.out.println("main"+i);
        }
    }
}
 //创建一个类继承Thread
 class MyThread extends Thread{
     @Override
     public void run() {//线程体
         for (int i=0;i<50;i++){
             System.out.println("Thread"+i);
         }
     }
 }

多线程执行过程效果图,

      创建线程的方法2:提供一个实现接口Runnable的类作为线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体。

package com.example;

public class MyClass {
    public static void main(String args[]){

        //生成一个Runnable接口实现类对象
        MyRunnable runnable=new MyRunnable();
        //生成一个Thread对象,并将Runnable接口实现类的对象
        //作为参数传给Thread对象
        Thread thread=new Thread(runnable);
        //通知Thread对象执行start()方法
        thread.start();
    }
}

 //
 class MyRunnable implements Runnable{
     @Override
     public void run() {
         for (int i=0;i<50;i++){
             System.out.println("Runnable"+i);
         }
     }
 }

这两种线程的创建方法,第一种比较简单,第二种复杂一点点,在平常的实用中,第二种方法用的比较多。这就和java的单继承有点关系了。

      线程的执行过程(其实就是生命周期):来几发图片得意

        单线程执行过程很好理解,一根筋。多线程的话,他们是切换来执行的,线程1执行一小部分,线程2也执行一小部分,其实呀!线程1和线程2在抢着执行(竞争执行)。因为CPU切换速度很快,我们经常会误以为多线程是同时执行的,其实不是同步。

 

线程的简单控制方法:

中断线程:

----Thread.sleep();进入休眠状态,线程经过一段时间醒过来还需继续抢CUP资源

----Thread.yield();自动让出CUP资源

设置线程的优先级(线程优先级最大值是10,最小是1,可以通过Thread的静态方法来设置优先级。线程运行快不快还得看它抢CPU的能力)

----getPriority();

----setPriority();

 

java多线程我们就先学到这里,后面会更新java线程高级部分内容。

PointPainting 复现 三维目标检测 阅读详情

相关推荐

Code Composer Studio 12.0.0版本 官方例程导入实战指南

本文详细介绍了在Code Composer Studio 12.0.0版本中,如何利用内置的Resource Explorer工具高效导入官方例程的完整实战指南。通过分步讲解定位开发板、导入工程、配置编译器及调试验证等关键操作,帮助开发者快速上手TI微控制器开发,避免常见错误,有效提升学习与开发效率。

weixin_29169899的博客 120

java多线程文件句柄,Java中线程用法总结

本文实例总结了Java中线程用法。分享给大家供大家参考。具体分析如下:1.线程是基本调度单元。共享进程的资源,如内存和文件句柄。但有自己的pc(程序计数器),stack(线程栈)及本地变量2.线程的优势:a) 充分利用多处理器b) 可以简化模型。特定任务给特定线程。如servlets及rmi等框架。c) 对异步事件的简单处理。如socket,nio使用更复杂。而现在的操作系统支持更大数量的线程。d...

weixin_28991555的博客 263

【LaTeX PPT模板集】Beamer主题与配色使用教程

【LaTeX PPT模板集】Beamer主题与配色使用教程

Xminyang的博客 1万+

一、java多线程基础

多线程的概念 进程是程序运行的实例。启动一个java程序其实就是启动了一个jvm的进程。进程是程序向操作系统申请资源(内存空间、文件句柄等)的基本单位。 线程是进程中可以独立执行的最小单位。 进程和线程的关系,可以比喻成一个项目组和组员的关系。项目组完成一个项目需要需求,开发,测试。这些往往都是并行的。需要需求,开发和测试人员协作完成。他们共享项目组的资源,如需求文档,功能代码等。 为什么...

qq_26680031的博客 267

YOLOv8实战:5分钟搞定Windows环境下的目标检测模型部署(附常见报错解决方案)

本文详细介绍了在Windows环境下快速部署YOLOv8目标检测模型的实战指南,包括环境配置、模型加载、快速验证及常见报错解决方案。通过5分钟快速入门教程,帮助开发者高效实现计算机视觉应用,特别适合需要快速上手的AI开发者。

weixin_30566063的博客 556

VMware虚拟机调用NVIDIA显卡全攻略:从3D加速到直通与vGPU

显卡虚拟化技术是虚拟化领域的关键组成部分,它通过在虚拟机中模拟或直接分配物理GPU资源,实现了图形渲染与通用计算的加速。其核心原理在于通过Hypervisor层对GPU指令进行拦截、转换或直接映射,从而平衡资源隔离与性能损耗。这项技术的核心价值在于提升资源利用率、实现计算环境隔离,并支持AI训练、3D渲染、科学计算等高性能负载的灵活部署。在应用场景上,轻量级图形界面加速、CUDA学习验证适合使用虚拟3D加速;而追求极致性能的机器学习训练、专业渲染则需依赖PCIe直通技术;对于企业级GPU资源池化与多租户共享

weixin_32308101的博客 996

java 线程句柄_线程与线程句柄

今天温习很久前写的代码,发现自己写的这么一句代码,m_hTheard = CreateThread(NULL,0,RegNotifyProc,LPVOID(this),0,NULL);CloseHandle(m_hTheard);突然给糊涂了,刚创建的线程,为什么有close了,还是当初入门不踏实,没有细想,现在反过来都记不得了,通过查资料,解决了我的疑惑。1,线程和线程句柄(Handle)不同,...

weixin_29248653的博客 519

Transformers在自动驾驶领域的应用(High-level like in scene)

Transformers uses global attention mechanism to capture long-range interaction information. Two core modules in Transformers are Self-Attention and Cross-Attention, which defined asAttn(Q,K,V)=softmax(QK⊤dk)VSelfAttn(X)=Attn(WQX,WKX,WVX)CrossAttn(X,Y)=Attn

qq_39337332的博客 1774

浅谈 Java多线程

  当一个程序进入内存中运行起来它就变为一个进程。因此,进程就是一个处于运行状态的程序。同时进程具有独立功能,进程是操作系统进行资源分配和调度的独立单位。   线程是进程的组成部分 。 通常情况下,一个进程可拥有多个线程,而一个线程只能拥有一个父进程。   线程可以拥有自己的堆栈、自己的程序计数器及自己的局部变量,但是线程不能拥有系统资源,它与其父进程的其他线程共享进程中的全部资源,这其中包括进程的代码段、数据段、堆空间以及一些进程级的资源(例如,打开的文件等)。   线程是进程的执行单元,是CPU调

linjingyg的博客 277

LoRa正点原子模块组网步骤

按照我上一篇的博客和视频演示,相信大家一定都可实现了lora模块点对点的通信了。那我们来进行一个比较有高难度的设计吧! 使用多个loRa模块去完成一个组网设计: 在这之前一定要配置模块信息为定点传输 AT+TMODDE要等于1奥 第一步分析通讯协议: 点对点通讯是在透明传输的条件下,地址和信道都是一样的,直接发送接受数据。 组网呢我们利用是: 定向传输就是 A、B的地址、信道不同 假如A是要想B发送信息就用函数来下面: int b[5]...

weixin_43205178的博客 4082

PyTorch深度学习实战(36)——Pix2Pix详解与实现

Pix2Pix 是基于生成对抗网络的图像转换框架,能够将输入图像转换为与之对应的输出图像,能够广泛用于图像到图像转换的任务,如风格转换、图像修复、语义标签到图像的转换等。Pix2Pix 的核心思想是通过对抗训练将输入图像和目标输出图像进行配对,使生成网络可以学习到输入图像到输出图像的映射关系。在本节中,将学习使用 Pix2Pix 根据给定轮廓生成图像。

盼小辉丶的博客 1万+

java多线程浅谈之一

又是javaXX浅谈,可能有人会问了你天天浅谈浅谈的,就不能深谈?说实话技术这块随便拎个看似不起眼的点扩展开都能详细的让你怀疑人生,所以短短这么一篇博客不敢随便说深聊,你说深聊结果来个说浅谈的分分钟把你虐死,让你怀疑小学是不是没学好深和浅的概念。所以浅谈浅谈,谈个基础,碰到问题知道从哪方面思考,从哪方面找知识点就足够了。废话不多说,进入正题,今天的大咖:多线程!多线程是个啥?打开手机用app听个歌,发现听歌的同时还有歌词显示,可以边听边收藏,甚至还可以边听边评论哪个歌手唱的跟鸭子一样难听,这ap...

TEST_littlesun的博客 534

高级技能-高可用和容灾-两地三中心、异地多活架构

两地三中心和异地多活是当前主流的跨地域高可用架构方案。两地三中心通过生产中心、同城灾备和异地灾备的组合,提供多级容灾能力,适合对数据安全要求高的行业。异地多活则采用单元化设计,多个站点同时服务,提升资源利用率,但需解决网络延迟、数据冲突等挑战。两种架构在RTO/RPO、一致性、改造成本等方面各具特点,企业应根据业务规模、一致性要求和预算进行选择,可考虑从同城双活起步,逐步向异地多活演进。混合架构可能是平衡容灾与多活的务实方案。

zhongjianfeng100的博客 168

浅谈Java多线程机制

浅谈Java多线程机制 (文中重点信息将用红色字体凸显)

u010984205的专栏 5053

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

浅谈之Java多线程

Java多线程是Java语言中一个非常重要的特性,它允许程序同时执行多个任务。通过多线程,程序可以同时处理多项任务,从而缩短程序的执行时间。另外,多线程也有助于利用多核处理器,更好地发挥计算机硬件的性能。今天我们就从最简单的的ThreadRunnable讲到现在比较常用的。

qq_43649799的博客 1084

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

浅谈Java 多线程同步

最近在研究多线程同步的一些问题,整理了网上很多文档,在这里给大家分享下 Java并发机制的底层实现原理 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令。 多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线程的处理的数...

持之以恒! 3394

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

java多线程浅谈之二

最近拿了翻了一下一本叫做《java多线程编程实战指南》的书,本来想给自己定个计划把多线程深入起来,结果一章没看完心里投降的小白旗已经挂起来了。要么觉得概念多而且晦涩难懂,要么觉得代码很难看懂,果真还是要一定代码水平才能轻松看懂的书。但考虑到多线程在实际生活中使用范围太广了,比如在大数据处理和复杂任务的处理上,通过多个线程的并行处理将数据分解成许多块小数据处理来缩短处理时间。所以还是得咬咬牙逼迫自己多了解了解,于是我就想这本这么难的书有哪些是当下水平的我能够看的懂并用到实际当中的,之前我分享过...

TEST_littlesun的博客 250

浅谈Java多线程的同步问题

    多线程的同步依靠的是对象锁机制,synchronized关键字的背后就是利用了封锁来实现对共享资源的互斥访问。下面以一个简单的实例来进行对比分析。实例要完成的工作非常简单,就是创建10个线程,每个线程都打印从0到99这100个数字,我们希望线程之间不会出现交叉乱序打印,而是顺序地打印。先来看第一段代码,这里我们在run()方法中加入了synchronized关键字,

6661

浅谈java中的多线程

浅谈java中的多线程和锁什么是多线程?多线程举例实现线程安全的方法---锁类锁、对象锁 什么是多线程? 多线程通俗的来说就是同时有多个线程在运行,但是运行是在并发执行,即并行,而单线程就是事情必须按照顺序来执行,只能在执行完一件事情之后才能执行下一件事情。 每当建立一个线程就会有一个线程栈,在线程中运行哪个方法,哪个方法就会入栈,方法执行完之后就会出栈,当线程栈中没有任何要执行的方法的时候就是一...

qq_43677686的博客 200

浅谈java多线程

点击蓝色字关注我们!一个努力中的公众号长的好看的人都关注了一.线程的生命周期及五种基本状态关于Java中线程的生命周期,首先看一下下面这张较为经典的图:图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括:Java线程具有五中基本状态新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThre...

大耳根图图的博客 95

浅谈Python和Java的多进程与多线程的异同

最近在学习Python多线程相关的部分,遇到了这样的一句话:“对于任何Python程序,不管有多少的处理器,任何时候都总是只有一个线程在执行”,即Python中的多线程是“假的多线程”,是什么原因造成这样的说法,搜集查阅了一些资料,并且对比Java,如下是个人对于这个问题的一些理解: 解释型语言 编译性语言例如c语言:用c语言开发了程序后,需要通过编译器把程序编译成机器语言(即计算机识别的二进

Megustas_JJC的博客 9729

浅谈java线程,多线程。

一、前言 相信很多人和我一样,从业多年来对线程,多线程还是比较迷惑,似懂非懂,甚至是闻之色变,网上看了很多帖子依然是云里雾里,说不出个所以然来。本篇文章将以简洁明了的方式带大家了解什么是线程多线程。 二、正文 注意: 本篇文章注重代码实现,概念只做简短的介绍,详细请自行百度之。 2.1、单线程 单线程顾名思义就是只有一条线程在运行程序,不存在多个线程同时抢夺cpu的情况。如下代码: ...

zpzp06的博客 234

浅谈java的多线程

在java中有三种多线程方法 继承Thread类 实现Runnable接口 实现Callable接口 1.集成Thread类package Head; import java.lang.Thread;class MyThread extends Thread{ private String name; private int num; public MyThread(Stri

韦海涛的博客 1768

浅谈Java多线程之FutureTask

Runnable和Callable是多线程中的两个任务接口,实现接口的类将拥有多线程的功能,FutureTask类与这两个类是息息相关! FutureTask继承体系 看下这张图,原来FutureTask类实现了Runnable和Future,既然是Runnable的实现类,我们可以写如下的代码: public static void main(String[] args) { FutureTask task = new FutureTask(new Callable() {

java小白翻身 1676

java 多线程浅谈

1.​​​​​要想了解多线程。首先,要知道进程和线程的区别。       进程:是操作系统进行资源分配的基本单位,进程间的切换会有较大的开销。       线程:是cpu任务调度和执行的基本单位,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。                  进程也指 一个具有独立功能的程序模块,对一组数据集合进行的一次运行活动,一个进程可以包含多个线程。 ...

weixin_37728231的博客 181
上一篇: Android网络技术之OkHttp框架
下一篇: 浅谈Android多线程编程
小红妹
博客等级 码龄10年 151粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值