java线程

java多线程之线程副本(ThreadLocal) ThreadLocal理解使用 1.threadlocal是一种多线程间并发访问变量的解决方案,采取以空间换时间的方式,不使用锁,为每个线程提供变量的独立副本,以保障线程安全 2.背景:变量分为类变量 实例变量和局部变量(局部变量是线程安全的不用考虑) 情景一:ThreadLocal存储类变量的时候存在线程安全问题,所有线程共享类变量,变量的改变会导致所有线程副本变量的改变 private Th... 阅读详情

一. 线程的概念

Java 虚拟机允许应用程序并发地运行多个线程。每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以标记或不标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。
多线程和多进程有什么区别,本质的区别在于每个进程有它自己的变量的完备集,线程则共享相同的数据。对程序来说,共享的变量使线程之间的通信比进程间的通信更加有效而简单。而且,对于操作系统而言,线程比进程更"轻量级",创建和销毁单个线程比发起进程的开销要小得多。
线程的分类:用户线程和守护线程。用户线程:Java虚拟机在它所有非守护线程已经离开后自动离开。守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为Daemon模式,false为User模式。setDaemon(boolean on)方法必须在线程启动之前调用,当线程正在运行时调用会产生异常。isDaemon()方法将测试该线程是否为守护线程。在一个守护线程中创建了其他线程,那么这些新产生的线程不用设置Daemon属性,都将是守护线程,用户线程同样。


二. 线程状态类型(5种状态)

1. 新建状态(New):新创建了一个线程对象。
2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。
3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。
4. 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。阻塞的情况分三种:
(一)、等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入
等待池中。
(二)、同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入
锁池中。
(三)、其他阻塞:运行的线程执行sleep()或join()方法,或者发出了I/O请求时,JVM会把该线程置为
阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
5. 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
    线程状态图如下:图片源自网络

三、线程的实现方式:

在Java中, 多线程的实现有两种方式:扩展java.lang.Thread类、实现java.lang.Runnable接口。

(1)通过扩展Thread类来创建多线程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class MutliThreadDemo {
    public static void main(String [] args){
        MutliThread m1=new MutliThread("Window 1");
        m1.start();        
    }
}

class MutliThread extends Thread{
    private int ticket=100;//每个线程都拥有100张票
    
     MutliThread(String name){
        super(name);//调用父类带参数的构造方法
    }

    public void run(){
        while(ticket>0){
            System.out.println(ticket--+" is saled by "+Thread.currentThread().getName());
        }
    }
}

 

(2)通过实现Runnable接口来创建多线程 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class MutliThreadDemo2 {
    public static void main(String [] args){
        MutliThread m1=new MutliThread("Window 1");     
        Thread t1=new Thread(m1);        
        t1.start();
     }
}


class MutliThread implements Runnable{
    private int ticket=100;//每个线程都拥有100张票
    private String name;

    MutliThread(String name){
        this.name=name;
    }

    public void run(){
        while(ticket>0){
            System.out.println(ticket--+" is saled by "+name);
        }
    }
}

Thread和Runnable以及Callable之间的关系,请参阅我的另一篇文章: http://blog.youkuaiyun.com/linghu_java/article/details/17101199 。



【Python脚本】Python自动大麦网抢票,准点原价秒杀演唱会门票,拒绝黄牛交易!从我做起!!!1 你是否错过了周杰伦的票,最近又没抢到五月天的票,不要太难过,今晚有张学友的票,后天还有张杰的票,加油哦! 阅读详情

相关推荐

用PyTorch和snnTorch库5分钟搞定一个脉冲神经网络(SNN)手写数字识别Demo

本文详细介绍了如何使用PyTorch和snnTorch库快速搭建一个脉冲神经网络(SNN)手写数字识别Demo。通过模拟生物神经元的脉冲发放机制,SNN在低功耗场景中展现出独特优势。文章涵盖环境配置、数据预处理、模型构建、训练评估全流程,并提供了性能优化技巧和常见问题解决方案,帮助开发者在5分钟内实现高效的SNN应用。

weixin_29300931的博客 392

java线程副本--ThreadLocal

一、ThreadLocal 介绍  多线程并发之所以会不安全,就是因为线程不拥有资源,它们共享竞争着进程的资源,这样线程并发起来不安全,一般的解决方案便是用锁,保证每时每刻一个资源最多只能被一个线程拥有。而在java的多线程中,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。   ThreadLocal解决多线程的并发问题的思路很简单:就是为每一个线程维护一个副本变量,从而让线

jinggod的博客 4244

别再乱改基础库了!手把手教你搞定uni-app小程序上传图片报错(chooseAndUploadFile权限篇)

本文详细解析了uni-app开发微信小程序时遇到的`chooseAndUploadFile`权限报错问题,并提供了四步解决方案。从隐私协议与API权限的关联入手,指导开发者正确配置后台声明、双重提交策略和版本管理,避免降级基础库等常见误区,确保小程序合规运行。

weixin_33709364的博客 276

JAVA线程

虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock,Lock是接口不能直接实例化,这里采用它的实现类ReentrantLock来实例化。

互联网底层民工的博客 1万+

手把手教你学Simulink——基于多能互补微电网系统的建模与优化场景实例:风柴储联合供电系统在孤岛模式下的功率分配建模

本文介绍了使用MATLAB/Simulink和Simscape Electrical构建风柴储联合供电系统的建模方法。系统包含风力发电、柴油发电、储能电池等模块,重点研究孤岛模式下功率分配策略。详细说明了从创建项目、添加模块到搭建风力发电系统(含MPPT控制)、柴油发电系统及集成各模块的全过程,并提供了仿真参数设置建议。通过分析频率偏差、电池SOC等关键指标,验证了系统在维持稳定运行的同时能有效利用可再生能源。该模型为研究多能互补微电网提供了实验平台,未来可拓展更高效的能量管理策略和AI技术的应用。

MHD0815的博客 1万+

[AI] 本地部署 Dify 遇到 Internal Error?一文彻底解决密码不一致引发的问题

摘要:Dify本地部署常见InternalError错误主要由配置残留或密码不一致导致,特别是修改.env文件后未同步清除数据库记录。彻底解决方案包括:1)清理Docker数据;2)删除旧配置和数据库;3)还原源代码;4)重建.env文件;5)重新初始化部署。关键提醒:记录部署路径、备份.env文件并妥善保存密码。该错误本质是配置冲突,最有效方法是完全重置而非调试,保持清晰的部署管理可避免多数InternalError问题。(149字)

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 434

Java线程:什么是线程

一 基本概念   多任务:同一时刻运行多个程序的能力。每一个任务称为一个线程。可以同时运行一个以上线程的程序称为多线程程序。   Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线

arredando的博客 3万+

水与光的奇妙“切割之舞”:水导激光切割技术探秘

水导激光切割技术的诞生,是材料加工领域不断追求高精度、高质量加工的成果。传统激光切割技术在加工过程中,材料会因瞬间高温而产生热变形、热影响区大以及切割面粗糙等问题,这些弊端在对一些高精度、热敏性材料的加工中尤为突出 ,迫切需要一种新的技术来克服这些难题。水导激光切割技术的起源可以追溯到 20 世纪 80 年代。1986 年,德国公司 Aesculap-Werke AG 首次提出了将水流引入激光切割过程的创新想法,并制造出首代水导激光设备。不过,当时的技术尚处于雏形阶段,仅仅是在光纤出口添加了一小柱水流,激光

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1673

Java创建线程

既然说到线程,在这里就给大家普及一下线程。 线程(Thread): 是操作系统能够进行运算调度的最小单位。 它被包含在进程之中,是进程中的实际运作单位。 一个线程指的是进程中一个单一顺序的控制流。 🥂🥂🥂 其实:进程在我们计算机中我们随时都在使用:按住 Ctrl + shift + esc 这个就是一个进程,在计算机中,线程就是进程中的一个执行单元。 那么,进程是什么呢? 进程:简简单单,我们日常中使用的QQ就是一个进程,进程可以理解为就是一个软件,线程则就是这个软件中的一些功

分享it知识! 7911

YOLOv11改进 | 检测头篇 | 利用AFPN辅助YOLOv11检测头进行特征融合识别(全网独家创新)

本文给大家带来的最新改进机制是利用AFPN(渐近特征金字塔网络)来优化检测头,AFPN的核心思想是通过引入一种渐近的特征融合策略,将底层、高层和顶层的特征逐渐整合到目标检测过程中。这种渐近融合方式有助于减小不同层次特征之间的语义差距,提高特征融合效果,使得检测模型能更好地适应不同层次的语义信息。本文在AFPN的结构基础上,为了适配YOLOv11改进AFPN结构,同时将AFPN融合到YOLOv11中(因为AFPN需要四个检测头,我们只有三个,下一篇文章我会出YOLOv11适配AFPN增加小目标检测头)

Snu77的博客 3749

MATLAB 开发项目实例 1000 例专栏之第37例:基于Simulink的无人机飞行控制系统设计

通过上述项目实例,我们成功地使用Simulink设计和仿真了一个无人机的飞行控制系统。这个项目展示了从无人机建模、路径规划、控制器设计到仿真验证的完整流程。Simulink的可视化和模块化特性使得系统的建模和仿真更加直观和高效。

xiaoheshang_123的博客 163

【线程】Java线程操作

讲述了线程的启动、终止、等待操作,还有线程的各种状态。

telasi2004的博客 2063

Python爬虫实战:使用最新技术抓取采购网招标公告信息

本文将详细介绍如何使用Python最新爬虫技术构建一个高效的采购网招标公告信息抓取系统。我们将从爬虫基础概念讲起,逐步深入到高级技巧,包括异步处理、反爬虫对策、数据解析与存储等,并提供完整的代码实现。本文旨在为读者提供一套完整的网络数据采集解决方案,适用于各类政府采购平台和商业招标网站。网络爬虫(Web Crawler)是一种自动抓取互联网信息的程序或脚本,它们按照一定的规则,自动地浏览万维网并提取所需数据。在现代商业环境中,爬虫技术广泛应用于价格监控、竞争情报收集、市场研究等领域。

2201_76125261的博客 1620

1、【java线程及线程池系列】java线程及线程池概念详解

缓冲队列长度的设置,按照一般的理解应该设置成maximumPoolSize的5倍,因为单个线程在不切换cpu的情况下是单个cpu运算一个线程,corePoolSize设置成和cpu一样的数量,maximumPoolSize设置成cpu的2倍,避免cpu处于空闲状态则直接加入一旦cpu空闲理解执行的线程数量,同时由于cpu的速度较快以及有请求执行的线程加入缓冲队列中减少cpu等待时间,故将缓冲队列设置大一些。线程池存在的目的在于提前创建好需要的线程,减少临时创建线程带来的资源消耗。

alanchanchn的专栏 8万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JAVA线程、线程池解析

是操作系统能够进行的最小单位,它被包含在进程之中,是进程中的实际运作单位。进程是资源分配的基本单位,它拥有自己独立的地址空间和各种资源;而线程是处理机调度的基本单位,它只能和其他线程共享进程的资源,而。线程的上下文切换速度比进程快。

柔丽君的博客 1413

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java多线程——认识线程

Java多线程初阶—— 认识线程

YumunaoDAII的博客 1631

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java 线程机制

Java 的线程机制是 Java 平台的核心特性之一,它允许程序同时执行多个任务。下面我将详细介绍 Java 线程的基本概念、创建方法、生命周期以及同步机制。

weixin_47363690的博客 1876

Java线程与内核线程

本篇文章探究下Java线程与内核线程的关系. 在Java中,一个Java的线程对应一个内核的线程,实际的业务代码是由内核线程来执行的,而Java线程只是一个傀儡. 先通过一个简单的实验热热身 import java.lang.Thread; public class Example { public static void main(String[] args) throws Exception { new Thread(new Runnable() { @O

书唐瑞的博客 975

Java线程

线程(Thread)是操作系统调度的最小单元。每个进程至少有一个主线程,Java 程序本身就是多线程运行的。Java 中线程是轻量级的进程,多个线程共享同一个进程的资源(如堆内存),但拥有自己的栈空间。

m0_46168903的博客 1378

Java笔记——java 线程详解_java线程

此时就用这三个方法来灵活控制。并且jdk官方人员发现,很多线程在等待锁的时候,在很短的一段时间就获得了锁,所以它们在线程等待的时候,并不需要把线程挂起,而是让他无目的的循环,一般设置10次。例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的线程执行完毕后,低优先级的线程才能够执行;thread.join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。

a25847a的博客 1341

Java线程,多线程,线程同步,以及Java回调线程,还有难懂的synchronized

曾几何时,有多少人听到了多线程就某花一紧,听到了线程的同步就感觉昏昏欲睡。那我们今天就聊一聊我的理解。线程是什么?Java中常用到的新建线程的场景?以及多线程和线程池的概念,最牛逼的还是要说清楚线程的同步。我跟人认为在Java的线程开发中,如果没有搞清楚同步的使用和JVM到底是什么机制实现的同步(本文中只针对synchronized的同步做讲解lock另写)。 废话不多说了,什么是线程这个问题大

Kyunchen的专栏 4485

JAVA线程详解

目录 线程简介 线程实现 JAVA线程调度 JAVA线程的状态 JAVA新建线程 JAVA线程Thread类 AVA线程属性 线程安全 线程简介 操作系统运行一个程序时,会为其创建一个进程,一个进程里可以创建多个线程,线程为操作系统调度的最小单位,每个线程拥有各自的计数器、堆栈、、局部变量等属性,并且可以访问共享变量,CPU在这些线程上高速切换调度执行,早期CPU由单核实现,同...

qq_18581221的博客 7407

Java多线程之线程

关系多了,错综复杂,千头万绪,往往出现“万事俱备,只欠东风”的情况。获往往因为抓的不是关键,连夜三班,急急忙忙,完成这一环节之后,还得等待旁的环节才能装配。当Context Switch 发生时,需要由操作系统保持当前线程的状态,并恢复另一个线程的状态,Java 中对应的概念就是程序计数器(Program Counter Register), 它的作用是记住下一条jvm指令的执行地址,是线程私有的。有一种特殊的线程叫做守护线程,只要其它非守护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。

故里有青山,而我心里有你 767

java线程池停止线程_如何在Java中停止线程?

java线程池停止线程 停止线程 (Stopping a thread) As we know that there are no direct or shortcut ways to stop thread in Java. 众所周知,在Java中没有直接或快捷的方式来停止线程。 As we know thread in java stops when the execution of run...

cumtb2009的博客 5814

Java并发——线程与Java线程

前言 对于大多数Java开发人员而言,在实际工作中很少遇到复杂的并发场景。最多可能也就用一下线程池来并发运行程序以提升执行效率。 虽然现状如此,但这并非意味着我们简单掌握并发的应用就可以了。在当今摩尔定律失效的情况下,并发处理成为了计算机发展的新动力,也成为了人类压榨CPU运算能力最有利的武器! 基于以上的认知,我认为从思想和底层基础的角度来系统学习Java并发知识会比零零散散的的学习和简单应用能够得到更高的收益。 本篇文章将系统介绍Java并发的基础条件——线程。 线程 首先,我们必须深刻认识到,在计算机

兵临奇点 348
上一篇: Android View中getViewTreeObserver().addOnGlobalLayoutListener()
下一篇: Android Drawable
cding1818
博客等级 码龄17年 963粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值