JAVA 的多线程浅析

hbase性能调优 一、服务端调优  1、参数配置    1)、hbase.regionserver.handler.count:该设置决定了处理RPC的线程数量,默认值是10,通常可以调大,比如:150,当请求内容很大(上MB,比如大的put、使用缓存的scans)的时候,如果该值设置过大则会占用过多的内存,导致频繁的GC,或者出现OutOfMemory,因此该值不是越大越好。     2)、hbase... 阅读详情

JAVA 的多线程浅析

                                                                                  作者:马光晖

一 JAVA 语言的来源、及特点

在这个高速信息的时代,商家们纷纷把信息、产品做到Internet国际互连网页上。再这些不寻常网页的背后,要属功能齐全、安全可靠的编程语言,Java是当之无愧的。Java是由Sun Microsystem开发的一种功能强大的新型程序设计语言。是与平台无关的编程语言。它是一种简单的、面象对象的、分布式的、解释的、键壮的、安全的、结构的中立的、可移植的、性能很优异的、多线程的、动态的、语言。

Java自问世以后,以其编程简单、代码高效、可移植性强,很快受到了广大计算机编程人士的青睐。Java语言是Internet上具有革命性的编程语言,它具有强大的动画、多媒体和交互功能,他使World Web进入了一个全新的时代。Java语言与C++极为类似,可用它来创建安全的、可移植的、多线程的交互式程序。另外用Java开发出来的程序与平台无关,可在多种平台上运行。后台开发,是一种高效、实用的编程方法。人们在屏幕前只能看到例如图案、计算的结果等。实际上操作系统往往在后台来调度一些事件、管理程序的流向等。例如操作系统中的堆栈,线程间的资源分配与管理,内存的创建、访问、管理等。可谓举不盛举。下面就多线程来谈一谈。

 

二 JAVA的多线程理论

2.1引入

      Java提供的多线程功能使得在一个程序里可同时执行多个小任务。线程有时也称小进程是一个大进程里分出来的小的独立的进程。因为Java实现的多线程技术,所以比C和C++更键壮。多线程带来的更大的好处是更好的交互性能和实时控制性能。当然实时控制性能还取决于系统本身(UNIX,Windows,Macintosh等),在开发难易程度和性能上都比单线程要好。传统编程环境通常是单线程的,由于JAVA是多线程的。尽管多线程是强大而灵巧的编程工具,但要用好却不容易,且有许多陷阱,即使编程老手也难免误用。为了更好的了解线程,用办公室工作人员作比喻。办公室工作人员就象CPU,根据上级指示做工作,就象执行一个线程。在单线程环境中,每个程序编写和执行的方式是任何时候程序只考虑一个处理顺序。用我们的比喻,就象办公室工作人员从头到尾不受打扰和分心,只安排做一个工作。当然,实际生活中工作人员很难一次只有一个任务,更常见的是工作人员要同时做几件事。老板将工作交给工作人员,希望工作人员做一这个工作,再做点那个工作,等等。如果一个任务无法做下去了,比如工作人员等待另一部门的信息,则工作人员将这个工作放在一边,转入另一个工作。一般来说,老板希望工作人员手头的各个任务每一天都有一些进展。这样就引入了多线程的概念。多线程编程环境与这个典型的办公室非常相似,同时给CPU分配了几个任务或线程。和办公室人员一样,计算机CPU实际上不可能同一时间做几件事,而是把时间分配到不同的线程,使每个线程都有点进展。如果一个线程无法进行,比如线程要求的键盘输入尚未取得,则转入另一线程的工作。通常,CPU在线程间的切换非常迅速,使人们感觉到好象所有线程是同时进行的。

              任何处理环境,无论是单线程还是多线程,都有三个关键方面。第一个是CPU,它实际上进行计算机活动;第二个是执行的程序的代码;第三个是程序操作的数据。

在多线程编程中,每个线程都用编码提供线程的行为,用数据供给编码操作。多个线程可以同时处理同一编码和数据,不同的线程也可能各有不同的编码和数据。事实上编码和数据部分是相当独立的,需要时即可向线程提供。因此经常是几个线程使用同一编码和不同的数据。这个思想也可以用办公室工作人员来比喻。会计可能要做一个部门的帐或几个或几个部门的帐。任何情况的做帐的任务是相同的程序代码,但每个部门的数据是不同的。会计可能要做整个公司的帐,这时有几个任务,但有些数据是共享的,因为公司帐需要来自各个部门的数据。

多线程编程环境用方便的模型隐藏CPU在任务切换间的事实。模型允许假装成有多个可用的CPU。为了建立另一个任务,编程人员要求另一个虚拟CPU,指示它开始用某个数据组执行某个程序段。下面我们来建立线程。

       建立线程

在JAVA中建立线程并不困难,所需要的三件事:执行的代码、代码所操作的数据和执行代码的虚拟CPU。虚拟CPU包装在Thread类的实例中。建立Thread对象时,必须提供执行的代码和代码所处理的数据。JAVA的面向对象模型要求程序代码只能写成类的成员方法。数据只能作为方法中的自动(或本地)变量或类的成员存在。这些规则要求为线程提供的代码和数据应以类的实例的形式出现。

Public class SimpleRunnable implemants Runable{

    Private String message;

    Public static void main(String args[]){

       SimpleRunnable r1=new SimpleRunnable(“Hello”);

       Thread t1=new Thread(r1);

       t1.start();

}

public SimpleRunnable(String message){

this.message=message;

}

public void run(){

    for(;;){

       System.out.println(message);

    }

}

}

线程开始执行时,它在public void run()方法中执行。这种方法是定义的线程执行的起点,就象应用程序从main()开始、小程序从init()开始一样。线程操作的本地数据是传入线程的对象的成员。

首先,main()方法构造SimpleRunnable类的实例。注意,实例有自己的数据,这里是一个String,初始化为”Hello”.由于实例r1传入Thread类构造器,这是线程运行时处理的数据。执行的代码是实例方法run()。

2.2 线程的管理

单线程的程序都有一个main执行体,它运行一些代码,当程序结束执行后,它正好退出,程序同时结束运行。在JAVA中我们要得到相同的应答,必须稍微进行改动。只有当所有的线程退出后,程序才能结束。只要有一个线程一直在运行,程序就无法退出。线程包括四个状态:new(开始),running(运行),wait(等候)和done(结束)。第一次创建线程时,都位于new状态,在这个状态下,不能运行线程,只能等待。然后,线程或者由方法start开始或者送往done状态,位于done中的线程已经结束执行,这是线程的最后一个状态。一旦线程位于这个状态,就不能再次出现,而且当JAVA虚拟机中的所有线程都位于done状态时,程序就强行中止。当前正在执行的所有线程都位于running状态,在程序之间用某种方法把处理器的执行时间分成时间片,位于running状态的每个线程都是能运行的,但在一个给定的时间内,每个系统处理器只能运行一个线程。与位于running状态的线程不同,由于某种原因,可以把已经位于waiting状态的线程从一组可执行线程中删除。如果线程的执行被中断,就回到waiting状态。用多种方法能中断一个线程。线程能被挂起,在系统资源上等候,或者被告知进入休眠状态。该状态的线程可以返回到running状态,也能由方法stop送入done状态,

方法

描述

有效状态

目的状态

Start()

开始执行一个线程

New

Running

Stop()

结束执行一个线程

New或running

Done

Sleep(long)

暂停一段时间,这个时间为给定的毫秒

Running

Wait

Sleep(long,int)

暂停片刻,可以精确到纳秒

Running

Wait

Suspend()

挂起执行

Running

Wait

Resume()

恢复执行

Wait

Running

Yield()

明确放弃执行

Running

Running

2.3线程的调度

线程运行的顺序以及从处理器中获得的时间数量主要取决于开发者,处理器给每个线程分配一个时间片,而且线程的运行不能影响整个系统。处理器线程的系统或者是抢占式的,或者是非抢占式的。抢占式系统在任何给定的时间内将运行最高优先级的线程,系统中的所有线程都有自己的优先级。Thread.NORM_PRIORITY是线程的缺省值,Thread类提供了setPriority和getPriority方法来设置和读取优先权,使用setPriority方法能改变Java虚拟机中的线程的重要性,它调用一个整数,类变量Thread.MIN_PRIORITY和Thread.MAX_PRIORITY决定这个整数的有效范围。Java虚拟机是抢占式的,它能保证运行优先级最高的线程。在JAVA虚拟机中我们把一个线程的优先级改为最高,那么他将取代当前正在运行的线程,除非这个线程结束运行或者被一条休眠命令放入waiting状态,否者将一直占用所有的处理器的时间。如果遇到两个优先级相同的线程,操作系统可能影响线程的执行顺序。而且这个区别取决于时间片(time slicing)的概念。

管理几个线程并不是真正的难题,对于上百个线程它是怎样管理的呢?当然可以通过循环,来执行每一个线程,但是这显然是冗长、乏味。JAVA创建了线程组。线程组是线程的一个谱系组,每个组包含的线程数不受限制,能对每个线程命名并能在整个线程组中执行(Suspend)和停止(Stop)这样的操作。

2.4信号标志:保护其它共享资源

这种类型的保护被称为互斥锁。某个时间只能有一个线程读取或修改这个数据值。在对文件尤其是信息数据库进行处理时,读取的数据总是多于写数据,根据这个情况,可以简化程序。下面举一例,假设有一个雇员信息的数据库,其中包括雇员的地址和电话号码等信息,有时要进行修改,但要更多的还是读数据,因此要尽可能防止数据被破坏或任意删改。我们引入前面互斥锁的概念,允许一个读取锁(red lock)和写入锁(write lock),可根据需要确定有权读取数据的人员,而且当某人要写数据时,必须有互斥锁,这就是信号标志的概念。信号标志有两种状态,首先是empty()状态,表示没有任何线程正在读或写,可以接受读和写的请求,并且立即提供服务;第二种状态是reading()状态,表示有线程正在从数据库中读信息,并记录进行读操作的线程数,当它为0时,返回empty状态,一个写请求将导致这个线程进入等待状态。

只能从empty状态进入writing状态,一旦进入writing状态后,其它线程都不能写操作,任何写或读请求都必须等到这个线程完成写操作为止,而且waiting状态中的进程也必须一直等到写操作结束。完成操作后,返回到empty状态,发送一个通知信号,等待的线程将得到服务。

下面实现了这个信号标志

class Semaphore{

       final static int EMPTY=0;

       final static int READING=1;

       final static int WRITING=2;

       protected int state=EMPTY;

       protected int readCnt=0;

public synchronized void readLock(){

    if(state==EMPTY){

    state=READING;

    }

    else if(state==READING){

    }

    else if(state==WRITING){

       while(state==WRITING){

           try {wait();}

           catch(InterruptedException e){;}

       }

    state=READING;

    }

    readCnt++;

return;

}

public synchronized void writeLock(){

    if(state==EMPTY){

    state=WRITING;

    }

    else{

    while(state!=EMPTY){

       try {wait();}

       catch(InterruptedException e) {;}

    }

    }

}

public synchronized void readUnlock(){

readCnt--;

if(readCnt==0){

    state=EMPTY;

notify();

}

}

public synchronized void writeUnlock(){

state=EMPTY;

notify();

}

}

现在是测试信号标志的程序:

class Process extends Thread{

String op;

Semaphore sem;

Process(String name,String op,Semaphore sem){

    super(name);

    this.op=op;

    this.sem=sem;

    start();

}

public void run(){

    if(op.compareTo("read")==0){

    System.out.println("Trying to get readLock:"+getName());

    sem.readLock();

    System.out.println("Read op:"+getName());

    try {sleep((int)(Math.random()*50));}

    catch(InterruptedException e){;}

    System.out.println("Unlocking readLock:"+getName());

    sem.readUnlock();

    }

    else if(op.compareTo("write")==0){

    System.out.println("Trying to get writeLock:"+getName());

    sem.writeLock();

    System.out.println("Write op:"+getName());

    try {sleep((int)(Math.random()*50));}

    catch(InterruptedException e){;}

    System.out.println("Unlocking writeLock:"+getName());

    sem.writeUnlock();

    }

    }

}

public class testSem{

    public static void main(String argv[]){

       Semaphore lock = new Semaphore();

       new Process("1","read",lock);

       new Process("2","read",lock);

       new Process("3","write",lock);

       new Process("4","read",lock);

}

}

testSem 类从process类的四个实例开始,它是个线程,用来读或写一个共享文

件。Semaphore类保证访问不会破坏文件,执行程序,输出结果如下:

Trying  to  get  readLock:1

Read     op:1

Trying  to  get  readLock:2

Read  op:2

Trying  to  get  writeLock:3

Trying  to  get  readLock:4

Read  op:4

Unlocking  readLock:1

Unlocking  readLock:2

Unlocking  readLock:4

Write  op:3

Unlocking  writeLock:3

从这可看到,

2.5死锁以及怎样避免死锁:

为了防止数据项目的并发访问,应将数据项目标为专用,只有通过类本身的实例方法的同步区访问。为了进入关键区,线程必须取得对象的锁。假设线程要独占访问两个不同对象的数据,则必须从每个对象各取一个不同的锁。现在假设另一个线程也要独占访问这两个对象,则该进程必须得到这两把锁之后才能进入。由于需要两把锁,编程如果不小心就可能出现死锁。假设第一个线程取得对象A的锁,准备取对象B的锁,而第二个线程取得了对象B的锁,准备取对象A的锁,两个线程都不能进入,因为两者都不能离开进入的同步块,既两者都不能放弃目前持有的锁。避免死锁要认真设计。线程因为某个先决条件而受阻时,如需要锁标记时,不能让线程的停止本身禁止条件的变化。如果要取得多个资源,如两个不同对象的锁,必须定义取得资源的顺序。如果对象A和B的锁总是按字母顺序取得,则不会出现前面说道的饿死条件。

 

三Java多线程的优缺点

 

由于JAVA的多线程功能齐全,各种情况面面具到,它带来的好处也是显然易见的。多线程带来的更大的好处是更好的交互性能和实时控制性能。当然实时控制性能还取决于系统本身(UNIX,Windows,Macintosh 等),在开发难易程度和性能上都比单线程要好。当然一个好的程序设计语言肯定也难免有不足之处。由于多线程还没有充分利用基本OS的这一功能。这点我在前面已经提到,对于不同的系统,上面的程序可能会出现截然不同的结果,这使编程者偶会感到迷惑不解。希望在不久的将来JAVA的多线程能充分利用到操作系统,减少对编程者的困惑。我期待着JAVA会更好。

 

四       参考文献:

作者  Philip Heller  Simon Roberts  著

              Peter Seymour  Tom McGinn 

1、JAVA高级开发指南   

 

 

本书共分四大部分,第一部分基础篇,介绍Java环境、小程序和应用程序、构件、布置管理器和移植等问题。第二部分高级问题介绍图形、线程、动画、文件和流、联网、数据库的访问、分布式对象和协议处理器等问题。第三部分新API介绍JDK V1.1的新功能。第四部分附录介绍了API清单、FAQ等。对于多线程的部分,介绍什么是线程,详细介绍了JAVA中的线程机制,具体讨论了包括Java线程的建立与控制和AWT事件处理器线程的意义,与各种环境中的线程有关的思想包括实际CPU少于线程的平台上线程的调度和线程间的交互作用问题,并举了大量的实例。

作者       MICHAELD.THOMAS           PRATIKR.PATEL

                 ALAND.HUDSON                   DONALDA.BALL JR  著

2、Java for Internet 编程技术

 

 

 

本书分为五篇。第一篇介绍Java语言的概念;第二篇介绍Java applete的组成要素,语法、语义、接口等;第三篇介绍Java编程高级技术;第四篇介绍Java与Internet网络;第五篇介绍了四个应用程序。对于高级线程部分,详细介绍了创建线程的过程,及讨论了如何共享资源等问题。

五、FAQ

1、             给Java下一个定义?

它是一种简单的、面象对象的、分布式的、解释的、键壮的、安全的、结构的中立的、可移植的、性能很优异的、多线程的、动态的、语言。

2、applet是什么?

它是一种可以嵌入到Web主页内的小程序。它是一种强大的、通用的、纯粹的、独立的、与平台无关的程序设计语言。

3、虚拟机具有哪些功能?

具有许多基本功能,如串操作工具,图形及接口例程、基本数据结构以及数学功能。这使它超越了作为放火墙的责任的要求。

4、wait()和notify()是Thread类的方法吗?

它们不是Thread类的方法,它们包含在Java.lang.Object类中。

5、         在Java中线程构成的三要素:

第一个是CPU,它实际上进行计算机活动;第二个是执行的程序的代码;第三个是程序操作的数据。

6、         在Java中如何建立一个线程

见2.1节中建立线程。

7、         线程的管理有几种方法:

见2.2节线程的管理。

8、线程同步通常采取的措施有那些?

监控程序:保护共享变量;

信号标志:保护其它共享资源;

避免死锁。

9、Java中的线程组起的作用是什么?

线程组是线程的一个谱系组,包含的线程数不受限制能对每个线程命名并能在整个线程组中执行挂起(suspend)和停止(stop)的操作。

还用于Java运行环境以及线程间的安全性的处理。

10、用Runnable接口创建线程有什么好处?

它为类定义了一个标准功能架,Runnable接口指定一个已经实现了的方法—run方法。

 

JAVA多线程编程技术探讨.pdf JAVA多线程编程技术探讨,深入JAVA多线程编程技术的基础 立即下载

相关推荐

致远OA公文管理模块相关操作

致远oa协同办公系统 公文管理模板 相关操作

weixin_59666050的博客 4271

Java多线程技术

在Java中,虚拟CPU是自动封装进Thread类的实例中,而Code和Data要通过一个对象传给Thread类的构造函数。 public interface Runnable Tip:设计该类的目的就是为希望在活动时执行代码的对象提供一个公共协议。 public class Thread extends Object implements Runnable T

seriesc的专栏 523

TPS5430/54302调试血泪史:从‘烫手山芋’到冒烟烧板,我的5V电源到底怎么了?

本文深入剖析了TPS5430/TPS54302 DCDC电源芯片调试中的常见问题,包括异常发热、电压漂移等,并提供了从热设计到PCB布局的全面解决方案。通过实战案例,揭示了数据手册中未明确的‘潜规则’,帮助工程师避免烧板风险,提升电源系统稳定性。

weixin_28744423的博客 501

Java多线程探究-线程属性

线程优先级Java中,每一个线程都有一个线程优先级。默认情况下,一个线程继承它的父线程的优先级。 设置优先级,使用Thread的setPriority方法 优先级的范围为Thread.MIN_PRIORITY 到 Thread.MAX_PRIORITY 这两个代表1到10,setPriority的参数必须在1到10之间,否则会抛异常,Thread.NORM_PRIORITY为5 当线程

行人事,知天命 880

Proteus实现电子秤仿真与称重检测显示

Proteus实现电子秤仿真与称重检测显示测量原理(或设计方案)原理图代码 测量原理(或设计方案) 数字电子秤总体框图如图所示: 金属箔式应变片工作原理 电阻丝在外力作用下发生机械变形时,其电阻值发生变化,这就是电阻应变效应,描述 电阻应变效应的关系式 金属箔式应变片就是通过光刻、腐蚀等工艺制成的应变敏感元件。如图所示,将四个金属箔应变片(R1、R2、R3、R4)分别贴在双杆式悬臂梁弹性体的上下两侧,弹性体受到压力发生形变,应变片随悬臂梁形变被拉伸或被压缩 测量电路 通过应变片转换悬臂梁被测部位受力

Matataya的博客 1万+

从DeepMimic到虚拟偶像:用动作捕捉数据训练AI跳舞的完整流程(附Blender插件配置)

本文详细介绍了如何利用DeepMimic的深度强化学习框架,将动作捕捉数据转化为虚拟偶像或游戏角色的舞蹈动作。从核心的模仿学习理念、PyBullet环境搭建、策略网络与奖励函数设计,到数据处理、训练技巧(如参考状态初始化),最后讲解了如何将训练好的AI模型集成到Blender和Unity等工具中,实现从数据到实时驱动角色的完整流程。

weixin_29054399的博客 502

java学习笔记_线程

一、Java线程:概念与原理 1、操作系统中线程和进程的概念 现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多

今生今世的专栏 1305

从叶片之舞到数据之眼:净空雷达如何重塑风电安全与效率的边界

净空雷达通过激光或毫米波技术实现风机叶片与塔筒间距离的毫米级实时监测,极大提升了风电场在极端天气下的安全性与运营效率。这项技术不仅预防扫塔事故,还通过数据可视化与智能分析赋能叶片健康管理和发电优化,成为风电数字化运维的核心基础设施。

xk7n92h3p5m的博客 1160

JAVA多线程浅析

什么是多线程 Java 给多线程编程提供了内置的支持。 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。 这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的...

Baron 310

蓝牙Mesh安全机制全解析:如何防止你的智能门锁被黑客控制?

本文深入解析蓝牙Mesh安全机制,重点探讨如何保护智能门锁免受黑客攻击。详细介绍了蓝牙Mesh的多层次安全架构,包括密钥管理体系、设备入网流程及实战防护策略,帮助用户构建更安全的智能家居网络。

h3i4j的博客 729

YOLO26创新改进 | 全网独家创新篇、小目标检测专属 | AAAI 2025 | 引入HS-FPN中的HFP和SDP创新点,从频域增强小目标特征,淘汰FPN进行升级,助力YOLO26有效涨点

本文提出HS-FPN特征金字塔网络,通过高频感知模块(HFP)和空间依赖感知模块(SDP)优化YOLO26模型。HFP利用高通滤波器增强小目标的高频特征,SDP捕获相邻像素的空间依赖关系。在AI-TOD等小目标检测数据集上,HS-FPN相比传统FPN显著提升性能。文章详细介绍了HFP和SDP的模块结构、核心代码实现,以及如何在YOLO26中集成这两个模块的配置方法,提供了多个版本的yaml文件配置方案。实验结果表明该方法能有效改善微小目标检测效果。

Ai缝合怪、助力小伙伴高效发论文 206

Java 的多线程浅析

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

沛哥儿的专栏 1030

QGis 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中...)

QGis 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中...)

279

java 多线程 实例浅析

        看了Thinking in java上的多线程后颇有感触,著文记之。在这里我假设各位都已经拥有了awt和applet的初级知识。         所谓线程,即计算机进程内部的子执行模块,从具体表现上来说,就是独立分配到一部分系统资源而独立于其他可执行代码执行的可执行代码。在java中,实现了语言上的多线程编程。Thinking in java中举了一系列的几个例子来阐述其较为表层的特点。         对于一个拥有ui的程序来说,控制其ui的代码段一般运行在一个线程中,如果想要时刻刷新

Winiex's Blog 5199

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[转载]JAVA 的多线程浅析

JAVA 的多线程浅析一 JAVA 语言的来源、及特点 在这个高速信息的时代,商家们纷纷把信息、产品做到Internet国际互连网页上。再这些不寻常网页的背 后,要属功能齐全、安全可靠的编程语言,Java是当之无愧的。Java...

congji3817的博客 149

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

浅析 java多线程

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

qq_42896005的博客 209

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

浅析Java中的多线程

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

Forlogenの解忧杂货铺 658

java多线程性能浅析

<br />今天看见je上一帖,对于上亿数据求和的算法,采用多线程到底快还是慢,我认为需要按情况而定。<br />1.单核,无IO,网络等资源操作情况下<br />   结果:多线程比单线程理论上要慢<br />   原因:多线程启动线程需要消耗cpu资源,多线程只是把这一计算过程分片,在同一时刻只会有一个线程占有cpu,所以采用多线程不但在启动时耗费资源,在线程调度上同样也耗费时间。所以单线程比多线程理论上要快。<br />2.单核,有IO,网络等资源操作情况下<br />   结果:多线程比

wangluo23的专栏 496

浅析Java 多线程中的锁

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

沛哥儿的专栏 3194

JAVA 的多线程浅析(转)

JAVA 的多线程浅析(转)[@more@]· 一、JAVA 语言的来源、及特点在这个高速信息的时代,商家们纷纷把信息、产品做到Internet国际互连网页上。再这些不寻常网页的背后,要属功能齐全、安全可靠的编程语言,Java是...

106
上一篇: 格式化输出数字
下一篇: 类注释文档编写方法
cherami
博客等级 码龄26年 11粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值