热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

alijava多线程

java多线程Thread的原理:privatenativevoidstart0();start0是一个native方法,jvm虚拟机在不同的操作系统
  1. java多线程

Thread的原理:

private native void start0();  start0 是一个native 方法  ,jvm虚拟机在不同的操作系统上(windows,linux,unix)都是不同的算法来实现的。

A native method is a Java method whose implementation is provided by non-java code

JNI技术Java不在乎Native方法是用什么语言实现的,只要一来语言能和底层打 交道就好了,二来语言实现完可以提供出来.dll/.so文件。因此同一个Native方法,如果不同的Java虚拟机去调用它,那么结果可能都不同,比 如Object的hashCode(),当然,运行效率也不尽然相同,因为不同的虚拟机对于不同的Native方法有自己的实现


  1. runnable

java只能支持单继承,runnale是接口可以突破这一局限

  • Thread和runable的关系 (Thread类本身 也是实现了runable接口),但是都是通过调用Thread类对象启动多线程 new Thread(runable).start()
  • Thread 的start 和 run方法:start方法因为开启新的线程因此包含了系统资源调度,同时方法内是通过调用run方法,run方法内部也是调用了target.run方法,也就是实现了runable的方法。

run方法只涉及到我们业务处理,所以我们写代码只关注业务代码即可。

  • 多线程开发 需要思考理清的问题。我们在开发多线程的时候其实就是资源的抢占访问。我们每实例化Thread对象就是多个线程对象,这多个Thread对象就表示多个线程对象
    Runnable接口可以用来表示一个资源,一个Runable接口就是一个资源。例如,Thread(runableA),Thread(runnableA),这是两个Thread线程都是访问runnableA实例这一个资源
    就是多线程开发。

  1. callable

 和runable一样都是需要Thread.start启动运行,callable是可以返回的,FutureTask也是实现了runable方法。里面调用了callable的call方法

task.get()方法就是在等在结果,awaitDone for循环等待结果执行完成,report 则将返回outcome将结果返回。

 

  1. 线程的运行状态

1、任何一个线程都是通过Thread封装,调用start启动,进入就绪状态

2、进入就绪状态就等待系统调度,调度成功进入运行状态,但是运行状态不可能一直持续下去,中间会产生暂停状态,例如某个线程执行到一定时间进入阻塞状态,随后会重新回归就绪状态。

3、run方法执行完毕,线程也就结果此时就可以直接进入到终止状态。



常用方法

public static native Thread currentThread();

public static native void sleep(long millis) throws InterruptedException; 需要处理中断异常,另外多个线程话进入到这一段代码块sleep(), 休眠会有先后顺序。

public boolean isInterrupted() public void interrupt() 所有正在执行的线程都是可以被中断的,中断线程必须进行异常处理InterruptedException。

public final void wait() throws InterruptedException 从object类中继承,当前线程会等待,当前线程指的是调用者线程。且当前线程必须持有object对象的监控器。currentThread{ synchronized(object) thisObject.wait()}

public final void join() throws InterruptedException 强制执行内部也是调用了wait,可以在满足某些条件之后,某一线程可独占资源,直到结束。当前线程中调用 霸道.join,那么当前线程需要等待此霸道线程执行完后才能执行。

public final synchronized void join(long millis)throws InterruptedException {long base &#61; System.currentTimeMillis();long now &#61; 0;if (millis <0) {throw new IllegalArgumentException("timeout value is negative");}if (millis &#61;&#61; 0) {while (isAlive()) {wait(0);}} else {while (isAlive()) { 这里while循环表示被抢线程就会一直等待霸道线程执行完成long delay &#61; millis - now;if (delay <&#61; 0) {break;}wait(delay);now &#61; System.currentTimeMillis() - base;}}

public static native void yield(); 礼让

public final void setPriority(int newPriority) 设置优先级&#xff0c;优先级越高越容易执行


Volatile 关键字

主要是定义在属性上的&#xff0c;表示此属性是只在操作主内存的&#xff0c;和同步没有关系。

正常变量操作&#xff1a;

1 获取变量原有的数据内容副本   2 利用副本进行数学计算   3 讲计算后的副本同步到主内存中






推荐阅读
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
author-avatar
芸阁__907
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有