精华内容
下载资源
问答
  • java同步异步区别
    2022-03-22 13:30:09

    同步

    同步就是当A请求一个资源的时候,这个资源正在被B使用,那么A就必须要等待,等到B使用完了A才能请求到。

    异步

    异步就是当A请求一个资源的时候,这个资源正在被B使用,A不需要等也可以请求到

    特点

    所以从安全的角度出发,同步是安全的保险的,异步是不安全的,容易导致死锁,一个线程死掉就会导致整个进程崩溃,但是呢没有同步机制的话性能是会有提升的

    线程池

    在计算机中任何资源的创建,包括线程,都需要消耗系统资源。在Web服务中,对于web服务器的响应速度必须要快,这就容不得每次在用户提交请求之后再去创建线程再去提供服务。为了减少用户的等待时间,线程必须是预先创建的,放在线程池里面,线程池可以用HashTable这种数据结构与来实现,看了Apach HTTP服务器的线程池的源代码,用的就是HashTable,key用线程对象,value用ControlRunnable,ControlRunnable是线程池中唯一能干活的线程,是它指派线程池中的线程对外提供服务。出于安全的考虑ApachHTTP服务器的线程池它是同步的。听说weblogic有异步只是听说只是听说只是听说

    关键字

    thread(线程)、thread-safe(线程安全)、intercurrent(并发)                                                              synchronized(同步的)、asynchronized(异步的)、                                                                          volatile(易变的)、atomic(原子的)、share(共享)

    同步,异步的时机以及怎么样做

    如果要跨越线程维护正确的可见性,然后几个线程之间都用了同一个非final变量,就必须使用synchronized(或者volatile)用来确保一个线程可以看见另一个线程的操作做的更改     

    为了在线程之间进行可靠的通信,也为了互斥访问,所以同步是必须的。这归因于java语言规范的内存模范,它规定了:一个线程所做的变化何时以及如何变成对其它线程可见。

    因为多线程将异步行为引进了程序,所以在需要同步时,必须有一种方法强制进行。例如:如果2个线程想要通信并且共享一个复杂数据结构,如链表,此时需要确保它们互不冲突,也就是必须阻止B线程 在A线程读数据的过程中向链表里面写数据(A获得了锁,B必须等A释放了该锁)            为了达到这个目的,java在一个旧的进程同步模型----监控器(Monitor)的基础上实现了一个巧妙的方案:监控器是一个控制机制,可以认为是一个只能容纳一个线程的盒子,一旦一个线程进入监控器,其他的线程就必须等待,直到那个线程退出监控为止。通过这种方式,一个监控器可以保证共享资源在同一时刻只可被一个线程使用。这种方式称之为同步。(一旦一个线程进入一个实例的任何同步方法,别的线程将不能进入该同一实例的其他同步方法,但是该实例的非同步方法仍然能够被调用)

    同步和多线程的关系:没有多线程的环境就不需要同步;有多线程也不一定需要同步。

    锁提供了两种主要特性:互斥(mutual exclusion)和可见性(visibility) 

    互斥就是只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据

    可见性要更加复杂一些,他必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的——如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前的值或不一致的值,这将引发许多严重问题

    为了防止多个线程并发对同一数据的修改,所以需要同步,否则会造成数据不一致   (就是所谓 的线程安全。 Java集合里面的Hashtable和Vector是线程安全的。我们大部分的程序都不是线程安全的,因为没有进行同步,而且我们没有必要,因为大部分情况根本没有多线程环境)。

    同步异步不要搞混了

    举个例子:普通B/S模式(同步)AJAX技术(异步)

    同步:提交请求->等待服务器处理->处理完返回 这个期间客户端浏览器不能干任何事

    异步:请求通过事件触发->服务器处理(这时浏览器仍然可以做其他事情)->处理完毕

    可见,此同步非彼同步——我们说的Java中的那个共享数据同步(synchronized)一个同步的对象是指行为(动作),一个同步的对象是指物质(共享数据)。

    Java同步机制有四种实现方式

    ThreadLocal

    synchronized()

    wait()与 notify()

    volatile

    目的都是为了解决多线程中的对同一变量的访问冲突

    ThreadLocal

    ThreadLocal保证不同线程拥有不同的实例,相同线程一定拥有相同的实例,即为每一个使用该变量的线程提供一个该变量值的副本,每个线程都可以独立改变自己的副本,而不是与其他线程的副本相冲突。

    优势:提供了线程安全的共享对象与其它同步机制的区别:同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信;而ThreadLocal 是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源,这样当然不需要多个线程进行同步了。

    volatile                                                                                                                                                

    volatile 修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且当成员变量发生变化时,强迫线程将变化值回写到共享内存。

    优势:这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

    缘由:Java 语言规范中指出,为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。而 volatile 关键字就是提示 VM :对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。

    使用技巧:在两个或者更多的线程访问的成员变量上使用 volatile 。当要访问的变量已在synchronized 代码块中,或者为常量时,不必使用。

    线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步,因此存在A和B不一致的情况。volatile就是用来避免这种情况的。 volatile告诉jvm,它所修饰的变量不保留拷贝,直接访问主内存中的(读操作多时使用较好;线程间需要通信,本条做不到)

    Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。

    只能在有限的一些情形下使用 volatile 变量替代锁。要使 volatile 变量提供理
    想的线程安全,必须同时满足下面两个条件:

    对变量的写操作不依赖于当前值;
    该变量没有包含在具有其他变量的不变式中。

    sleep() 、wait()

    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

    wait() 是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。(如果变量被声明为volatile,在每次访问时都会和主存一致;如果变量在同步方法或者同步块中被访问,当在方法或者块的入口处获得锁以及方法或者块退出时释放锁时变量被同步。)

                                    

    更多相关内容
  • 主要介绍了JAVA同步异步、阻塞和非阻塞之间的区别,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • 主要介绍了java同步异步、阻塞和非阻塞区别详解的相关资料,需要的朋友可以参考下
  • java同步异步区别是什么

    千次阅读 2021-02-12 11:06:00
    一、同步异步概念:(推荐:java视频教程)1.同步:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的...

    a9c3d00f3272522095ad1a6bc6c90e9c.png

    一、同步与异步概念:(推荐:java视频教程)

    1.同步:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。

    2.异步:将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死的感觉,会告诉你,你的请求系统已经响应了。你可以关闭界面了。

    二、Java中交互方式分为同步和异步两种:

    相同的地方:

    都属于交互方式,都是发送请求。

    不同的地方:

    同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;

    异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。 区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。

    更多java知识请关注java基础教程栏目。

    展开全文
  • 主要介绍了Java异步调用转同步方法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了java 同步异步、阻塞和非阻塞分析的相关资料,需要的朋友可以参考下
  • 下面小编就为大家带来一篇java 线程之对象的同步异步(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 而我们牛气冲冲的Java自然也有同步与异步,不过Java中的同步与异步似乎与我们平常认知中的同步异步有些区别。 到底是什么呢? 今天我们就来了解一下Java中同步与异步有什么区别。 1.同步 在多线程的环境中,经常...

    大家在使用手机的时候,比如小米手机,自带云空间,可以将数据同步到云空间上;很多文档app也有同步的功能。而我们牛气冲冲的Java自然也有同步与异步,不过Java中的同步与异步似乎与我们平常认知中的同步异步有些区别。

    到底是什么呢?

    今天我们就来了解一下Java中同步与异步有什么区别。

    1.同步

    在多线程的环境中,经常会碰到数据的共享问题,即当多个线程需要访问同一个资源时,它们需要以某种顺序来确保该资源在某一时刻只能被一个线程使用,否则程序的运行接口将会是不可预料的,说白了就是会出错。

    在这种情况下,就必须对数据进行同步了。

    例如,多个线程同时对同一个数据进行写操作,即当线程A需要使用资源T的时候,如果这个资源正在被线程B使用,同步机制就会让线程A一直等待下去,知道线程B结束对该资源的使用后,线程A才能够使用这个资源。

    由此可见,同步机制能够保证资源的安全。那怎么实现同步呢?要想实现同步操作,就必须获得每一个线程对象的锁。

    获得每一个线程对象的锁,可以保证在同一时刻只有一个线程能够进入临界区(访问互斥资源的代码块),并且在这个锁被释放之前,其他线程就不能再进入这个临界区,自然也就不能再访问相关资源了。如果还有其它线程想要获得该对象的锁,只能够进入等待队列等待。只有当拥有该对象锁的线程退出了临界区的时候,锁才会被释放,等待队列中有限级最高的线程才能获得锁。

    举个例子,这就好比上厕所。假设只有一个蹲位,当这个蹲位上有人的时候,那么其他来的人就没有办法使用这个蹲位。而大家都是有礼貌的人,因此都在排队等候。排队等候的人一直在观察蹲位使用者是否使用完蹲位,当蹲位使用者离开之后,这个蹲位也就被释放了,可以被其他人使用。这时候排在第一个位置的人就可以获得蹲位,并使用它。当他用完之后,下一个人又可以继续用。

    2.如何实现同步

    Java语言在同步机制中提供了语言级的支持,可以通过synchronized关键字来实现同步,但是该方法并不是“万金油”,它是以很大的系统开销作为代价的,有时候甚至可能造成死机。

    因此,同步控制并非越多越好。我们需要尽量避免无谓的同步控制。

    实现同步的方式有两种:

    • 利用同步代码块来实现同步
    • 利用同步方法来实现同步

    3.异步

    异步能够提高程序的效率,它非阻塞类似,由于每一个线程都包含了运行时自身锁需要的数据或方法,因此,在进行输入输出处理的时候,不必关心其它线程的状态或者行为,也不必等到输入输出处理完毕才返回。

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并不希望让程序等待方法的返回时,就应该使用异步编程。

    看完上面的文字,也许还有部分人不明白同步与异步的区别,这里给大家举一个生活中的小栗子~~

    同步就是你叫我去吃饭,如果我听到了,我就和你去吃饭,如果我没有听到,你就不停地喊,知道我告诉你说“我听到啦”,我们才一起去吃饭。

    而异步就是你喊我去吃饭,不等我响应你就自己去吃饭了。我得到消息之后可能立马就跟你去吃饭,也可能等到下班之后才去吃饭。

     

    好啦,以上就是Java中同步与异步之间区别的相关总结,如果大家有什么更具体的发现或者发现文中有描述错误的地方,欢迎留言评论,我们一起学习呀~~

     

    Biu~~~~~~~~~~~~~~~~~~~~宫å´éªé¾ç«è¡¨æå|é¾ç«gifå¾è¡¨æåä¸è½½å¾ç~~~~~~~~~~~~~~~~~~~~~~pia!

    展开全文
  • Java中交互方式分为同步异步两种,异同情况如下:同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要...

    Java中交互方式分为同步和异步两种,异同情况如下:

    同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;

    异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。 区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。

    2b93f7d9e72139491612521ee99a9411.png

    扩展资料:

    同步是用于确保资源一次只能被一个线程使用的过程,同步对于单线程程序没有任何好处。使用同步比非同步的性能差三到四倍。

    线程都是独立的,而且异步执行,也就是说每个线程都包含了运行时所需要的数据或方法,而不需要外部的资源或方法,也不必关心其它线程的状态或行为。但是经常有一些同时运行的线程需要共享数据,此时就需考虑其他线程的状态和行为,否则就不能保证程序的运行结果的正确性。

    需要做的是允许一个线程彻底完成其任务后,再允许下一个线程执行。必须保证一个共享的资源一次只能被一个线程使用。实现此目的的过程称为同步。

    同步对于单线程程序没有任何好处。使用同步比非同步的性能差三到四倍。线程方法介绍:

    构造函数:

    Thread()

    Thread(Runable target)

    Thread(Runable target,String name)

    Thread(ThreadGroup group,Runable target)

    Thread(ThreadGroup group,Runable target,String name)

    Thread(ThreadGroup group,String name)

    展开全文
  • java同步异步概念

    2021-11-20 21:45:54
    同步异步同步异步是针对应用程序和内核的交互而言的。同步指的是用户进程触发IO 操作并等待或者轮询的去查看IO 操作是否就绪;而异步是指用户进程触发IO 操作以后便开始做自己的事情,而当IO 操作已经完成的...
  • 上次已经为大家介绍过java多线程的同步异步,为大家详细分析了这两者的基本概念,今天再来详细的解析一下这两者之间的区别,并且它们的表现也是不同的,一起来了解一下吧。首先,他们最大的区别是,同步需要等待,...
  • 主要介绍了java发送短信系列之同步异步发送短信的相关资料,感兴趣的小伙伴们可以参考一下
  • Java中的同步异步

    2021-03-07 01:32:28
    java异步同步应用所谓异步输入输出机制,是指在进行输入输出处理时,不必等到输入输出处理完毕才返回。所以异步的同义语是非阻塞(None Blocking)。网上有很多网友用很通俗的比喻把同步异步讲解的很透彻 转过来举个...
  • Java中的同步异步详细介绍

    千次阅读 2021-02-12 09:56:52
    进程同步异步的概念1.进程同步:就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事.就像早上起床后,先洗涮,然后才能吃饭,不能在洗涮没有完成...
  • java同步异步

    2021-04-23 12:57:31
    长沙java培训小编今天和...长沙java培训认为当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率.Java同步:...
  • java中的同步异步

    千次阅读 2019-11-28 19:31:09
    显然这是由于全局资源造成的,有时为了解决此问题,优先考虑使用局部变量,退而求其次使用同步代码块,出于这样的安全考虑就必须牺牲系统处理性能,加在多线程并发时资源挣夺最激烈的地方,这就实现了线程的同步机制...
  • java同步异步区别是什么发布时间:2020-06-20 16:46:23来源:亿速云阅读:122作者:Leahjava中同步异步区别是什么?针对这个问题,这篇文章给出了相对应的分析和解答,希望能帮助更多想解决这个问题的朋友...
  • Java中的同步异步

    2021-05-15 15:39:21
    例如多个线程同时对同一数据进行写操作,即当线程A需要使用某个资源时,如果这个资源正在被线程B使用,同步机制就会让线程A一直等待下去,直到线程B结束对该资源的使用后,线程A才能使用这个资源,由此可见,同步...
  • Java同步异步区别

    2018-05-28 11:08:30
    同步:发送一个请求,等待返回,然后再发送下一个请求 异步:发送一个请求,不等待返回,随时可以再发送下一个请求 同步可以避免出现死锁,读脏数据的发生,一般共享某一资源的时候用,如果每个人都有修改权限,同时修改...
  • java同步异步知识

    2011-10-13 10:43:41
    同步就是你叫我去吃饭,我听到了就和你去吃饭;如果没有听到,你就不停的叫,直到我告诉你听到了,才一起去吃饭。 异步就是你叫我,然后自己去吃饭,我得到消息后可能立即走,也可能等到下班才去吃饭。
  • 同步异步、阻塞和非阻塞同步异步关注的是消息通信机制.同步是指: 发送方发出数据后, 等待接收方发回响应后才发下一个数据包的通讯方式. 就是在发出一个调用时, 在没有得到结果之前, 该调用就不返回, 但是一旦...
  • Java同步异步区别

    2021-01-18 21:59:00
    同步:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。这种情况下,用户不能关闭界面,如果...
  • Java 同步异步区别、联系

    万次阅读 2018-02-25 23:34:25
    对于我们开发的网站,如果网站的访问量非常大的话,那么...为了更好的理解并发和同步,我们需要先明白两个重要的概念:同步异步    2、如何处理并发和同步  今天讲的如何处理并发和同同步问题主要是通过锁机...
  • MySQL 使用Java创建同步异步MySQL连接和操作!
  • 同步请求和异步请求的区别先解释一下同步异步的概念同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯...
  • java中的同步异步

    2021-02-12 14:30:51
    摘自:https://www.cnblogs.com/caotao0918/p/10699785.html在...程序的运行结果将会是不可预料的,在这种情况下就必须对数据进行同步,例如多个线程同时对同--数据进行写操作,即当线程A需要使用某个资源时,如果这...
  • Java 同步异步

    2020-08-25 15:47:04
    1、同步异步同步异步通常来形容一次方法调用。 同步:方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。 异步:方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就...
  • 多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理。显然这是由于全局资源...异步:A线程要请求某个资源,但是此资源正在被B
  • 而这些区别造成了使用多线程和异步操作的时机的区别。2.异步操作的本质所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件的朋友肯定对DMA.....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 230,957
精华内容 92,382
关键字:

java同步异步区别

java 订阅