浅析Java多线程程序设计机制-Java基础-Java-编程开发

Java语言基础知识_1.1:Java与面向对象程序设计简介 目录 1.0 导学 1.1 Java与面向对象程序设计简介 1.2 基本数据类型与表达式 1.3 数组 1.4 算法的流程控制 1.5 第一章小结 1.0 导学 1)构建环境 JDK安装网站 Eclipse安装网站 构建JAVA开发环境。其中JDK是JAVA本地编译和解释的环境,而Eclipse则是使得开发效率更加便捷的编译环节。 注:下载时使用JAVA E... 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>  多线程是Java语言的一大特性,多线程就是同时存在N个执行体,按几条不同的执行线索共同工作的情况。程序,进程,线程,可以从不同的角度去理解。程序就是一段静态的代码,可以理解成一组计算机命令的集合.进行就是这个程序一次动态的执行过程,从代码的加载到执行完毕的一个过程。线程是一个比进程小的单位,一个进程再执行的过程中可以产生多个线程,每个线程也是由生产到销毁,可以理解成是进行的子集。我个人用一个觉得还算恰当的比喻来比喻三者。QQ客户端就是一个程序,登陆一个QQ就是开始了这个程序的一个进程,再QQ上发送消息给好友就貌似这个进程中的一个线程。不知道这样比喻恰当否?

  线程也是有状态和声明周期的,每个Java程序都会有一个缺省的主线程,对于应用程序applcation来说main方法就是一个主线程.Java语言使用的是Thread类及其子类的对象来表示线程的.创建一个新的线程的生命周期如下状态:

  1) 新建:当一个Thread类或者其子类的对象被声明并创建时,新的线程对象处于新建状态,此时它已经有了相应的内存空间和其他资源.

  2) 就绪:处于新建状态的线程被启动后,将进入线程队列排队等待CUP服务,这个时候具备了运行的条件,一旦轮到CPU的时候,就可以脱离创建它的主线程独立开始自己的生命周期.

  3) 运行:就绪的线程被调度并获得CUP的处理边进入了运行状态,每一个Thread类及其子类的对象都有一个重要的run()方法,当线程对象被调度执行的时候,它将自动调用本对象的run()方法,从第一句代码开始执行。所以说对线程的操作应该写到run()方法中.

  4) 阻塞:一个正在执行的线程如果再某种情况下不能执行了.进入阻塞状态,这个时候它不能进入排队状态,只有引起了阻塞的原因消失的时候,线程才可以继续进入排队状态等待CUP处理。

  5) 死亡:处于死亡状态的线程不具有继续执行的能力,线程死亡主要的原因是正常运行的线程完成了全部工作,即执行完了run()方法,另外就是被提前强制的终止了。

  线程的调度也是有优先级别的,就是说同样的排列优先级高可以提前被CPU处理,主要分三个级别,高中低.分别代表的数字是10.5.1分别有三个常量代表不可以被改变。最小优先级的常量是MIN_PRIORITY,普通的优先级的常量是NORM_PRIORITY,最高的优先级的常量是MAX_PRIORITY一般主线程的优先级是普通,另外可以通过Thread类的setPriority(int a)方法来修改系统自动设置的线程优先级。

  Java中编程实现多线程应有两种途径,一种是创建自己的线程子类,另外是实现一个接口Runnable。无论是那种途径最终读需要使用Thread类及其方法。Thread类有两种构造方法,public Thread()用来创建一个线程对象。public Thread(Runnable r)创建线程对象,参数r成为被创建的目标对象。这个目标必须实现Runnbale接口,给出该接口的run()方法的方法体,再方法体中操作.用两个构造方法创建完的线程就是一个新建的状态,等待处理.然后启动线程的start()方法,启动线程对象,线程进入排队状态也就是就绪状态.然后线程操作run()方法这个方法里的内容是被系统处理的内容.如果想使线程进入休眠状态可以调用sleep()方法,可以给一个参数,代表休眠的毫秒.如果给两个参数代表那秒。终止线程用yield()方法来完成.判断线程是否销毁可以用idAlive()方法判断线程是否活着。Runnable接口只有一个方法run()方法,我们实现这个接口把要操作的代码写到这个方法中,然后再把实现了整个接口的类的实例传给Therad类的构造方法即可操作线程。

  线程同步是一个再处理线程的时候需要注意的问题,同步方法要用synchronized关键字类修饰,被这个关键字修饰后,当一个线程A使用这个方法后,其它线程想使用这个方法就必须等待,知道线程A使用完该方法后方可使用.下面我写一个例子来说明线程同步,这个例子有两个线程会计和出纳,他们共同有一个账本.他们俩都可以存取方法对账本进行访问,会计使用存取方法的时候写入存钱的记录,出纳则写入取钱的记录。因此会计使用账本的时候出纳被禁止使用,反之也是如此。就是一个人使用另外一个人必须等待。下面我通过一个小程序Applet来实现这个事:

import Java.applet.*;
import Java.awt.*;
import Java.awt.event.*;

public class MyThread extends Applet implements Runnable {
 int money = 100;
 TextArea text1 = null;
 TextArea text2 = null;
 Thread Kuaiji = null;
 Thread Chuna = null;

 public void init() {
  Kuaiji = new Thread(this);
  Chuna = new Thread(this);
  text1 = new TextArea(20,8);
  text2 = new TextArea(20,8);
  add(text1);
  add(text2);
 }

 public void start() {
  Kuaiji.start();
  Chuna.start();
 }

 public synchronized void Cunqu(int number) {
  if(Thread.currentThread() == Kuaiji) {
   for(int i=1;i <=3;i ) {
    money = money number;
    try {Thread.sleep(1000);}
    catch(Exception e){}
    text1.append("/n" money);
   }
  }
  else if(Thread.currentThread() == Chuna) {
   for(int i=1;i <=2;i ) {
    money = money - number/2;
    try {Thread.sleep(1000);}
    catch(Exception e){}
    text2.append("/n" money);
   }
  }
 }

 public void run() {
  if(Thread.currentThread()==Kuaiji || Thread.currentThread()==Chuna) {
   for(int i=1;i <=3;i ) {
    Cunqu(30);
   }
  }
 }
}

  当一个线程使用同步方法中的某个变量,而此变量又需要其他线程修改后才能符合本线程的需要,那么可以再同步方法中使用wait()方法,使本线程等待,并允许其他线程使用这个同步方法.用notfyAll()方法同志所有的由于使用这个同步方法的处于等待的线程结束等待进入同步方法中运行,如果使使用notfy()就是单独同志一个线程进行同步方法进行活动.简单的理解就是wait()方法让线程等待,notfy()当一个线程运行,notfyAll()让全部线程运行。虽然Java支持多线程.一般线程不需要我们自己处理.但是也是需要了解和掌握的。再日后的项目中获取会根据不同情况,有不同的需求。

纽扣电池供电系统优化:NBM5100A与STM32F745VG组合方案 在低功耗物联网设备设计中,能量管理是核心挑战之一。纽扣电池因其体积小、成本低被广泛采用,但瞬时大电流需求常导致电压骤降和寿命缩短。通过超级电容缓冲技术,可以实现能量的细水长流式存储与集中释放。NBM5100A电源管理IC与STM32F745VG微控制器的组合方案,采用双阶段能量管理架构,先以恒定小电流充电,再通过电容释放大电流。这种方案不仅能提升系统稳定性,还能延长电池寿命3-5倍,特别适合智能门锁、无线传感器等需要间歇性高功率输出的场景。 阅读详情

相关推荐

sklearn2pmml xgboost缺失值(missing)处理的坑

sklearn2pmml xgboost缺失值(missing)如何处理 今天同事在部署xgboost pmml模型时遇到了大坑,线上spark预测和本地python预测结果怎么都不对应,记录一下处理过程。 看了下同事的代码,貌似也没有问题 from sklearn2pmml import PMMLPipeline from sklearn2pmml import sklearn2pmml fro...

Skycrab 8969

线程同步

线程同步Java程序中可以存在多个线程,但是在处理多线程问题时,必须注意这样一个问题:当两个或多个线程同时访问同一个变量,并且一些线程需要修改这个变量。程序应对这样的问题做出处理,否则可能发生混乱,比如一个工资管理负责人正在修改雇员的工资表,而一些雇员也正在领取工资,如果允许这样做必然初夏 混乱。因此,工资管理负责人正在修改工资表(包括他喝杯茶休息一会),将不允许任何雇员领取工资,也就是说这些雇员必

lmm0513的博客 842

深入SVT SPI VIP配置:如何灵活控制CS间隔、数据帧大小与时钟频率(含代码片段)

本文深入探讨了SVT SPI VIP的高级配置技巧,包括精确控制CS信号间隔、突破数据帧大小限制以及动态时钟频率切换。通过实战代码片段和详细配置步骤,帮助验证工程师灵活应对复杂SPI协议验证场景,提升验证效率和覆盖率。特别适合需要处理非标准SPI时序和特殊数据帧的芯片验证项目。

weixin_27014595的博客 280

浅析Java多线程程序设计机制---转

   多线程是Java语言的一大特性,多线程就是同时存在N个执行体,按几条不同的执行线索共同工作的情况。程序,进程,线程,可以从不同的角度去理解。程序就是一段静态的代码,可以理解成一组计算机命令的集合.进行就是这个程序一次动态的执行过程,从代码的加载到执行完毕的一个过程。线程是一个比进程小的单位,一个进程再执行的过程中可以产生多个线程,每个线程也是由生产到销毁,可以理解成是进行的子集。我个人用一个

633

ur3手眼标定+realsenseL515

知乎 csdn

AI_future的博客 977

手把手教你用RK3568开发板实现FPGA与Linux的DMA通信(含完整代码解析)

本文详细介绍了如何在RK3568开发板上实现FPGA与Linux系统的DMA通信,包括硬件配置、软件环境搭建、DMA通信原理、驱动开发及性能优化。通过完整的代码解析和实战案例,帮助开发者快速掌握异构系统间的高效数据传输技术,适用于物联网和边缘计算等场景。

weixin_29174385的博客 201

JAVA每日一题22

     题目:有两各线程accountant和cashier,他俩共同拥有一个帐本,他俩都可以使用saveOrTake(int mumber)对账本进行访问,会计使用saveOrTake方法时,向账本上写入存钱记录;出纳使用saveOrTake方法时,向账本写入取钱记录。因此,当会计正在使用saveOrTake方法时,出纳被禁止使用,反之也是这样。      class Bank implem...

duyiwuer888的专栏 513

别再只用固定线了!聊聊Android车机‘快速倒车’与‘正常倒车’的UI与数据流核心差异(附动态轨迹线实现原理)

本文深度解析Android车机中快速倒车与正常倒车的核心差异,探讨从内核级视频流水线到动态轨迹线的技术实现。快速倒车通过内核直接操作FrameBuffer实现2秒内响应,而正常倒车则支持多传感器数据融合与动态UI元素。文章还分享了动态轨迹线的算法实现与性能优化技巧,帮助开发者打造极致的倒车体验。

weixin_42550597的博客 253

java 线程机制_Java线程机制学习

前面的文章中总结过Java中用来解决共享资源竞争导致线程不安全的几种常用方式:synchronized;ReentrantLock;ThreadLocal;这些都是在简单介绍了基本用法的基础上再侧重于对底层原理的探讨,由于这些知识点涉及到方方面面,短时间之内完全弄懂并非易事。而写博客的初衷其实是驱动自己在学习的过程中及时总结,用自己的语言再将所学复述一遍以强化对知识的理解程度。所以在这篇文章里,我...

weixin_31969199的博客 302

FreeRTOS系统CPU使用率统计

操作系统中CPU使用率是在软件架构设计中必须要考虑的一个重要性能指标。它直接影响到程序的执行时间以及优先级更高的任务能否实时响应的问题。而CPU使用率也不能过低,避免资源浪费。

灵哎惹,凌沃敏的博客 1378

第一章 千牛实时获取消息之ws服务端搭建

以上就是今天要讲的内容,本文仅仅简单介绍了ws服务端的搭建,后面将介绍ws客户端的搭建和配合ws服务器的测试。

不想说话的树专栏 1824

Java多线程机制

进程:程序的一次动态加载过程,包括了代码加载,编译,执行,结束的一个完整过程 线程:线程是比进程更小的单位,行为很像进程,一个进程在执行过程中可以产生多个线程 多线程序机制:每个java程序都有一个主线程,当jvm加载代码,发现main方法,此时就会启动主线程,在mian方法执行过程中再创建的线程就是其他线程。 线程的四种状态: 新建状态:Thread类被创建 运行状态:执行run()方法 中断...

s243471087的博客 3740

某招标公告网和vcaptcha验证码识别逆向

本文分析了某验证码系统的加密流程及破解思路。首先通过反混淆技术定位到加密函数,拆解了包含指纹函数、环境参数等组成的加密字符串。研究发现验证码生成涉及canvas指纹、环境检测等反爬机制,可通过模拟浏览器环境绕过。验证过程需要解密图片顺序,通过work2.js计算还原图片位置,再结合滑动轨迹、时间等参数生成验证请求。文章仅提供技术研究思路,强调需遵守法律法规,严禁非法破解信息系统。完整流程包括环境模拟、加密参数还原、图片处理和轨迹生成等步骤,成功率较高。

码王吴彦祖的博客 577

浅析Java多线程程序设计机制

浅析Java多线程程序设计机制        多线程是Java语言的一大特性,多线程就是同时存在N个执行体,按几条不同的执行线索共同工作的情况。程序,进程,线程,可以从不同的角度去理 解。程序就是一段静态的代码,可以理解成一组计算机命令的集合。进行就是这个程序一次动态的执行过程,从代码的加载到执行完毕的一个过程。线程是一个比进 程小的单位,一个进程再执行的过程中可以产生多个线程,每个线程也是由

623

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Java 的多线程浅析

在 Java 中,多线程是同时进行多个任务的一种机制。一个线程是程序执行中的一个单独的控制路径。在创建线程时,您可以使用 Java 的多线程库中的类和方法。这个库提供了一些方法和类,可以帮助您实现一个多线程程序。在 Java 中,线程由 Thread 类表示。一个线程是单独的执行路径,由 CPU 调度器决定何时调用该线程。每个线程都有自己的字节码指令堆栈、局部变量、寄存器和程序计数器。您可以使用 Thread 类的方法来启动、暂停、恢复和停止线程。

沛哥儿的专栏 1030

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

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

浅析Java中的多线程

在理解Java中多线程的相关内容前,我们需要对宏观层面上操作系统中和进程相关的内容做一些了解,在知道了操作系统是如何管理进程和线程后,才能更好的理解Java中有关多线程的创建、调度和同步控制等内容。 1. 操作系统四大特性 并发(concurrence) 并行性与并发性这两个概念是既相似又区别的两个概念。并行性是指两个或者多个事件在同一时刻发生,这是一个具有微观意义的概念,即在物理上这些事...

Forlogenの解忧杂货铺 658

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java程序设计中科院_浅析Java多线程程序设计机制

多线程是Java语言的一大特性,多线程就是同时存在N个执行体,按几条不同的执行线索共同工作的情况。程序,进程,线程,可以从不同的角度去理解。程序就是一段静态的代码,可以理解成一组计算机命令的集合。进行就是这个程序一次动态的执行过程,从代码的加载到执行完毕的一个过程。线程是一个比进程小的单位,一个进程再执行的过程中可以产生多个线程,每个线程也是由生产到销毁,可以理解成是进行的子集。我个人用一个觉得还...

weixin_39834328的博客 133

浅析Java 多线程中的锁

补充一点,在使用锁时,我们也应该注意锁的粒度和锁定顺序。锁的粒度越小,锁定的时间就越短,竞争的线程就越少,从而提高并发效率。同时,锁的锁定顺序也会影响并发效率。当多个线程都需要获取多个锁时,如果锁定顺序不同,就可能出现死锁问题。因此,我们需要遵循一定的锁定顺序,尽可能减少死锁的出现。Java 中的锁机制是保证并发访问安全的重要工具。本文详细介绍了 Java 中的锁类型、锁的实现方法、锁的应用场景,以及锁的缺陷和解决方法。在使用锁时,我们需要根据实际的业务场景和运行环境,选择恰当的锁类型和实现方式。

沛哥儿的专栏 3192

对JAVA多线程 并发编程的理解

对JAVA多线程并发编程的理解 Java多线程编程关注的焦点主要是对单一资源的并发访问,本文从Java如何实现支持并发访问的角度,浅析对并发编程的理解,也算是对前段时间所学的一个总结。 线程状态转换 Java语言定义了5中线程状态,在任何一个时间点,一个线程只能有且只有其中一种状态,这5中状态分别是: Ø  新建(New):创建后尚未启动的线程处于这种状态 Ø  运行(Run

狮子爱睡觉的专栏 3209

测试方向基础———多线程浅析

线程简介 java创建多线程 同步金额死锁

m0_51508220的博客 1155

浅析 java多线程

内容来源: https://www.runoob.com/java/java-multithreading.html 优快云博主「Evankaka」https://blog.youkuaiyun.com/evankaka/article/details/44153709 1,什么是多线程。 线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单...

qq_42896005的博客 209

java多线程浅谈之一

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

TEST_littlesun的博客 534

java多线程同步与死锁_浅析Java多线程中的同步和死锁

Value Engineering1基于Java的多线程多线程是实现并发机制的一种有效手段,它允许编程语言在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间相互独立,且与进程一样拥有独立的执行控制,由操作系统负责调度。多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的同时是不可能的,但是由于CPU的速度非常快,用户感觉不到其中...

weixin_42376799的博客 266

JAVA 的多线程浅析

JAVA 的多线程浅析 一 JAVA 语言的来源、及特点 在这个高速信息的时代,商家们纷纷把信息、产品做到Internet国际互连网页上。再这些不寻常网页的背后,要属功能齐全、安全可靠的编程语言,Java是当之无愧的。Java是由Sun Microsystem开发的一种功能强大的新型程序设计语言。是与平台无关的编程语

行者无疆的专栏 482

java多线程浅析(二)-多线程安全

java多线程浅析(二)-多线程安全线程安全问题产生原因线程安全解决办法:java内置锁多线程死锁ThreadLocalJava内存模型VolatileVolatile与Synchronized区别重排序重排序对多线程的影响 线程安全问题产生原因 当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。 例如: 需...

qq_37760034的博客 204

多线程之CAS浅析

CAS简介 比较并交换(compare and swap, CAS),是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值。 悲观锁 总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加锁(读锁、写锁、行锁等),当其他线程想要访问数据时,都需要阻塞挂起。在Java中,synchronized的思想就是悲观

u011175079的博客 485
上一篇: 用Java实现回调例程-Java基础-Java-编程开发
下一篇: 将Java程序变成Windows系统服务-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值