Java多线程程序设计入门-Java基础-Java-编程开发

Java 多线程编程:从入门到精通 多线程是指在一个进程中同时运行多个线程,每个线程可以执行不同的任务。与单线程相比,多线程可以充分利用多核 CPU 的优势,提高程序的执行效率。Java 多线程编程是开发高性能应用的关键技术之一。通过掌握线程的创建、同步、通信以及线程池的使用,你可以编写出高效、可靠的多线程程序。同时,注意避免常见的多线程问题,并遵循最佳实践,才能真正发挥多线程的优势。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

   线程的优先级

  对于多线程程序,每个线程的重要程度是不尽相同,如多个线程在等待获得CPU时间时,往往我们需要优先级高的线程优先抢占到CPU时间得以执行;又如多个线程交替执行时,优先级决定了级别高的线程得到CPU的次数多一些且时间多长一些;这样,高优先级的线程处理的任务效率就高一些。

  Java中线程的优先级从低到高以整数1~10表示,共分为10级,设置优先级是通过调用线程对象的setPriority()方法,如上例中,设置优先级的语句为:

  thread1 threadone=new thread1(); file://用Thread类的子类创建线程;

  Thread threadtwo=new Thread(new thread2()); file://用Runnable接口类的对象创建线程;

  threadone.setPriority(6); file://设置threadone的优先级6;

  threadtwo.setPriority(3); file://设置threadtwo的优先级3;

  threadone.start(); threadtwo.start(); file://strat()方法启动线程;
  这样,线程threadone将会优先于线程threadtwo执行,并将占有更多的CPU时间。该例中,优先级设置放在线程启动前,也可以在启动后进行设置,以满足不同的优先级需求。

   线程的(同步)控制

  一个Java程序的多线程之间可以共享数据。当线程以异步方式访问共享数据时,有时候是不安全的或者不和逻辑的。比如,同一时刻一个线程在读取数据,另外一个线程在处理数据,当处理数据的线程没有等到读取数据的线程读取完毕就去处理数据,必然得到错误的处理结果。这和我们前面提到的读取数据和处理数据并行多任务并不矛盾,这儿指的是处理数据的线程不能处理当前还没有读取结束的数据,但是可以处理其它的数据。

  如果我们采用多线程同步控制机制,等到第一个线程读取完数据,第二个线程才能处理该数据,就会避免错误。可见,线程同步是多线程编程的一个相当重要的技术。

  在讲线程的同步控制前我们需要交代如下概念:

  1 用Java关键字synchonized同步对共享数据操作的方法

  在一个对象中,用synchonized声明的方法为同步方法。Java中有一个同步模型-监视器,负责管理线程对对象中的同步方法的访问,它的原理是:赋予该对象唯一一把'钥匙',当多个线程进入对象,只有取得该对象钥匙的线程才可以访问同步方法,其它线程在该对象中等待,直到该线程用wait()方法放弃这把钥匙,其它等待的线程抢占该钥匙,抢占到钥匙的线程后才可得以执行,而没有取得钥匙的线程仍被阻塞在该对象中等待。

  file://声明同步的一种方式:将方法声明同步
  class store
   {
    public synchonized void store_in()
    {
      ….
    }
    public synchonized void store_out(){
       ….}
    }
  2 利用wait()、notify()及notifyAll()方法发送消息实现线程间的相互联系

  Java程序中多个线程通过消息来实现互动联系的,这几种方法实现了线程间的消息发送。例如定义一个对象的synchonized 方法,同一时刻只能够有一个线程访问该对象中的同步方法,其它线程被阻塞。通常可以用notify()或notifyAll()方法唤醒其它一个或所有线程。而使用wait()方法来使该线程处于阻塞状态,等待其它的线程用notify()唤醒。

  一个实际的例子就是生产和销售,生产单元将产品生产出来放在仓库中,销售单元则从仓库中提走产品,在这个过程中,销售单元必须在仓库中有产品时才能提货;如果仓库中没有产品,则销售单元必须等待。

  程序中,假如我们定义一个仓库类store,该类的实例对象就相当于仓库,在store类中定义两个成员方法:store_in(),用来模拟产品制造者往仓库中添加产品;strore_out()方法则用来模拟销售者从仓库中取走产品。然后定义两个线程类:customer类,其中的run()方法通过调用仓库类中的store_out()从仓库中取走产品,模拟销售者;另外一个线程类producer中的run()方法通过调用仓库类中的store_in()方法向仓库添加产品,模拟产品制造者。在主类中创建并启动线程,实现向仓库中添加产品或取走产品。

  如果仓库类中的store_in() 和store_out()方法不声明同步,这就是个一般的多线程,我们知道,一个程序中的多线程是交替执行的,运行也是无序的,这样,就可能存在这样的问题:

  仓库中没有产品了,销售者还在不断光顾,而且还不停的在'取'产品,这在现实中是不可思义的,在程序中就表现为负值;如果将仓库类中的stroe_in()和store_out()方法声明同步,如上例所示:就控制了同一时刻只能有一个线程访问仓库对象中的同步方法;即一个生产类线程访问被声明为同步的store_in()方法时,其它线程将不能够访问对象中的store_out()同步方法,当然也不能访问store_in()方法。必须等到该线程调用wait()方法放弃钥匙,其它线程才有机会访问同步方法。

  这个原理实际中也很好理解,当生产者(producer)取得仓库唯一的钥匙,就向仓库中添放产品,此时其它的销售者(customer,可以是一个或多个)不可能取得钥匙,只有当生产者添放产品结束,交还钥匙并且通知销售者,不同的销售者根据取得钥匙的先后与否决定是否可以进入仓库中提走产品。

[1] [2]

Java小白从入门到精通,Java零基础入门看这一篇就够了 作为刚刚接触java的小白,今天这篇文章的目的是帮助大家快速入门java,少走弯路 如何快速入门Java? 一、作为刚接触Java的新手,先了解Java的基础。 Java 基本语法、Java 平台应用、Java的核心概念:JVM、JDK、JRE以及Java面向对象思想,同时要会学到如何在系统中搭建Java开发环境,以及如何利用第三方工具进行Java程序的开发。 还有记住学习Java语言最重要的是两点: 学习步骤/方法 学习资源 找到适合自己的学习方式,找到适合自己现阶段的学习资料,学习的过程中最好记笔记,. 阅读详情

相关推荐

Java学习开发入门基础教程系列

ava是一种跨平台的语言,一次编写,到处运行,在世界编程语言排行榜中稳居第二名(第一名是C语言)。 Java用途广泛,可以用来开发传统的客户端软件和网站后台,也可以开发如火如荼 Android 应用和云计算平台。 一. Java概述 1.Java语言概述 2.Java虚拟机以及跨平台原理 3.Java的主要就业方向 4.Java的不同版本 5.Java开发环境搭建 6.第一个Jav...

Java入门基础教程 1805

Java面向对象程序设计

要考试了,快复习

m0_73321330的博客 1080

Java 多线程并发编程:从基础原理到高性能优化实战

Java 多线程并发编程的学习是一项持续积累的过程。从基础的线程创建与同步到高级工具和性能优化,掌握并发编程的核心原理和技巧,对于构建高效、可扩展的系统至关重要。在实际开发中,除了学会使用 Java 提供的各种并发工具外,还需要在不断实践中发现并解决性能瓶颈,提升程序的响应速度和吞吐量。通过对并发模型的深入理解,并结合 Java 中的高级并发工具,开发者可以有效地应对现代分布式应用中所面临的复杂并发挑战,构建出高效、安全、可靠的并发系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 927

王者归来,Java 程序设计葵花宝典!

致谢 感谢所有关注本号的小伙伴们,这一年来本号的茁壮成长离不开大家的支持。2018年,继续坚持分享以及为大家谋求福利!!!Java技术栈往期赠书赠书一:新春第一次送书,价值78元 X 3本赠书二:送出6本技术书籍,价值372元!赠书三:月末送书福利|抽奖今天,继续放福利!!!持续关注,下周更有收获!!!转发、点赞支持一下吧!!!本次赠书《Java程序设计从入门到精通》本书以基础知识与实际动手编码相...

Java技术栈,分享最主流的Java技术 1674

【Java编程进阶】Java语言基础入门篇

整个 Java 编程技术栈体系十分庞大,建议初学者首先学习 Java 基础,例如语法基础,集合,IO 流,多线程,反射,注解等,再学习数据库,学会数据的持久化存储,这部分主要是 SQL 语句的学习,学会使用JDBC基础代码操作数据库等,接下来学习 JavaWeb ,主要学习 TomCat,Servlet,JSP等内容,学会使用 Java 技术解决 Web 互联网相关问题。接着学习主流的框架开发,例如 Spring ,SpringMVC,MyBatis等内容。

zhangxia_的博客 1万+

Java程序设计基础(第五版)期末总复习

一个程序中可以有多个类,但只能有一个类是主类。 在 Java 应用程序中,这个主类是指包含 main()方法的类。 在 Java 小程序中,这个主类是一个继承自系统类 JApplet 或 Applet 的子类。 应用程序的主类不一定要求是 public 类,但小程序的主类要求必须是 public 类。 主类是 Java 程序执行的入口点。 简单说应用程序是从主线程启动 (也就是 main () 方法)。 applet 小程序没有 main () 方法,主要是嵌在浏览器页面上。...

zhangxia_的博客 1万+

java书籍_Java之父:java入门进阶经典书籍推荐,你看了几本

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。学虽容易,学好不易,且学且珍惜入门类1.《java从入门到精通》(第3版)【内容介绍】本书从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进...

weixin_39804603的博客 402

Java 多线程编程:从基础到实战!

多线程编程是 Java 中的一个核心概念,它允许多个线程同时执行任务,从而提高程序的效率和响应性。在现代应用程序中,多线程编程无处不在,尤其是在处理高并发任务时。今天,我们将从基础到实战深入讲解 Java 的多线程编程,帮助你更好地理解和应用它。

喵手的博客 1118

java程序设计专家门诊pdf_Java程序设计专家门诊 PDF_源雷技术空间

资源名称:Java程序设计专家门诊 PDF0.1 为什么会产生Java,它有哪些特点0.2 如何安装JDK,它和JRE有什么区别0.3 Java的工作原理是什么,如何正确理解Java虚拟机第1章 Java基础1.1 如何配置Java的开发环境1.2 如何编写一个简单的Java程序1.3 如何反编译一个Java程序1.4 如何编写和制作Java的开发文档第2章 Java与面向对象2.1 什么是类和对...

weixin_36201981的博客 115

Java编程入门全攻略 - 免费自学指南

Java是一种广泛使用的高级编程语言,它以其跨平台特性、面向对象的编程范式以及健壮的社区支持而著称。Java代码被编译成字节码,这种字节码可以在任何安装了Java虚拟机(JVM)的系统上运行,从而实现了“一次编写,到处运行”的理念。Java的基础概念涉及数据类型、运算符、流程控制语句等,这些都是构建复杂Java应用的基石。随着本章的深入,我们将探索Java语言的核心特性,例如类和对象的创建、继承、封装以及多态性,这些都为编写高效和可维护的代码提供了理论基础。在Java中,类是创建对象的蓝图或模板。

weixin_28939623的博客 1028

Java编程入门教程:从基础到应用

Java作为一种成熟的编程语言,在开发领域拥有广泛的应用。它的基础语法是入门的关键,为后续深入学习Java编程打下了坚实的基础。Java语言是由Sun Microsystems公司在1995年发布的,设计初衷是“编写一次,到处运行”。Java的跨平台特性主要得益于它的运行时环境(JRE)和Java虚拟机(JVM)。Java应用程序在JVM上运行,经过JVM的转换,可以无差别地在不同操作系统上运行。

weixin_32099703的博客 589

Java基础入门

java基础入门,目录:java开发入门,java编程基础,面向对象,常见对象,多线程,集合框架,网络编程,IO流,反射机制,动态代理,注解,java新特性

JackChan 3357

Java程序设计基础教程:从入门到实践

本文还有配套的精品资源,点击获取 简介:Java作为面向对象的编程语言,自1995年推出以来,一直以其跨平台的特性在计算机科学领域广泛流行。本教程针对初学者,全面覆盖Java编程的核心概念和基础结构,包括语法结构、数据类型、变量和常量、运算符和表达式、控制流程、数组、方法、异常处理、类与对象、接口、内存管理、输入输出流、集合框架、多线程以及文件操作等。通过提供实用的源代码和...

weixin_35886636的博客 2176

Java基础入门第三版习题答案

Map的特点是存储的元素是键(Key)、值(Value)映射关系,元素都是成对出现的。int整型,占4个字节。Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以得到任意一个对象所属的类的信息,可以调用任意一个类的成员变量和方法,可以获取任意一个对象的属性和方法。多态性指的是在程序中允许出现重名现象","它指在一个类中定义的属性和方法被其它类继承后","它们可以具有不同的数据类型或表现出不同的行为","这使得同一个属性和方法在不同的类中具有不同的语义。

2301_80252792的博客 3609

Revit二次开发之双事件:空闲事件与DocumentChanged事件

对以下文章所展示的代码进行了修改,当前展示的代码可直接复制使用。 由于本人初学,下列语言为个人理解,如有错误请指正。   《引用1》中: 使用模态对话框,或者尽量保证事件在ExternalCommand的Execute函数或者ExternalApplication的OnStartup函数里面注册。 如果一定要使用非模态对话框,那么请使用ExternalEvent事件的Raise函数,强迫...

一个Revit二次开发的实习生 6147

射频电路设计——射频器件基础

本文仅供自己复习使用,请勿转载! 射频电路制作方法 MCM工艺 CMOS工艺 趋肤效应、深度 频率越高趋肤效应越明显 高频器件 高频电阻 绕线的比贴片的多一个电感,是因为绕线的因为是线绕制的,只有有线就会有电感,所以绕线电阻等效模型会比贴片的多一个电感 多晶硅电阻模型 深线性区MOS电阻 高频电阻的频率响应 记忆的话就后面的频率特性有点像电容的 高频电容 作用 单层贴片式电容 多层贴片式电容 MIM电容 MOM电容 由于是并联的,所以总的电容值是单个的直接相加 PN结电容 M.

输出每日所学,供大家学习使用 7145

【重生之Java零基础快速入门】

Java是一种面向对象的编程语言,由Sun Microsystems于1995年发布。希望这份详细的教程能帮助你快速入门Java编程!如果有任何问题,欢迎随时提问!

z17826856787的博客 1765

【Zephyr 系列 29】低功耗调试指南:电流测量、系统睡眠与功耗分析

Zephyr低功耗调试指南(150字摘要) 针对物联网设备续航需求,本文解析Zephyr低功耗调试方法:1️⃣ 机制:启用PM子系统和tickless idle,配置睡眠策略;2️⃣ 测量:推荐功耗分析仪捕捉μA级电流波动;3️⃣ 优化:管理唤醒源(如GPIO/RTC)、调整BLE广播/连接参数,挂起闲置外设;4️⃣ 分析:建立功耗文档,对比不同模式电流(如待机0.6mA vs广播3.2mA)。强调低功耗需系统性设计,初期即需纳入测试流程。下期将探讨Zephyr OTA升级实现。

hemoparrot的专栏 1180

【免费下载】 Java程序设计基础 第3版 PDF 下载

Java程序设计基础 第3版 PDF 下载 【下载地址】Java程序设计基础第3版PDF下载分享 Java程序设计基础 第3版 PDF 下载本仓库提供《Java程序设计基础 第3版》PDF版本的下载资源 项目地址: https:/...

gitblog_06586的博客 6110

Mplus实战:如何用交叉滞后面板模型(CLPM)分析心理学纵向数据?

本文提供了在Mplus软件中应用交叉滞后面板模型(CLPM)分析心理学纵向数据的实战指南。文章详细拆解了CLPM的核心概念、Mplus语法框架,并涵盖从基础的两变量模型到多变量、潜变量建模的扩展,以及结果解读与常见陷阱规避,旨在帮助研究者利用这一经典工具有效探索变量间的动态预测关系。

weixin_29253711的博客 403

探索robotics-toolbox-python:从基础安装到高级机器人运动学应用

本文详细介绍了robotics-toolbox-python工具箱,从基础安装、环境配置到机器人运动学与动力学的核心应用。通过D-H参数、URDF导入和内置模型三种方式快速构建机器人模型,并演示了正逆运动学计算、关节空间与任务空间轨迹规划以及三维可视化仿真。该工具箱极大地简化了机器人算法开发流程,是进行机器人学研究和应用实践的强大工具。

i1j2k的博客 496

Java语言程序设计(基础篇)

网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击“普通下载”) 购买正版 封页 编辑推荐 Java语言的经典教材,多年来畅销不衰。本书全面整合了Java 8的特性,采用“基础优先,问题驱动”的教学方式,循序渐进地介绍了程序设计基础、解决问题的方法、面向对象程序设计、图形用...

CiCi岛的专栏 7483

保姆级教程:用xmir-patcher一键解锁Redmi AX3000路由器的SSH(附视频演示)

本文提供Redmi AX3000路由器SSH解锁的保姆级教程,详细介绍了使用xmir-patcher工具一键解锁SSH的步骤,包括环境搭建、工具获取、图形化操作详解及常见问题排查。解锁后,用户可通过SSH连接实现刷机、插件安装、网络优化等高级功能,提升路由器性能。

weixin_29216049的博客 725
上一篇: 基于Java的移动游戏开发入门-Java基础-Java-编程开发
下一篇: Java开发环境的过去、现在和将来-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值