zoukankan      html  css  js  c++  java
  • IT题库6-同步和异步

    同步就是许多线程同时共用一个资源,一个线程在用别的线程就要等待。异步相反,可以不用等待。

    同步:发送一个请求,等待返回,然后才能再发送下一个请求;
    异步:发送一个请求,不等待返回,随时可以再发送下一个请求;

    同步可以避免出现死锁,读脏数据的发生。一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错。而同步就会按顺序来修改。

    异步则是可以提高效率了。现在cpu都是双核,四核,异步处理的话可以同时做多项工作。当然必须保证是可以并发处理的。

    同步和异步最大的区别就在于。一个需要等待,一个不需要等待。

    比如电话,就是一个同步例子。发起者需要等待接收者,接通电话后,通信才开始。需要等待接收者的返回信息。

    广播,就是一个异步例子。发起者不关心接收者的状态。不需要等待接收者的返回信息。

    经常看到介绍 ArrayList 和HashMap是异步,Vector和HashTable是同步,这里同步是线程安全的,异步不是线程安全的,举例说明:
    当创建一个Vector对象时候,
    Vector ve=new Vector(); 
    ve.add("1");
    当在多线程程序中,第一个线程调用修改对象ve的时候,就为其上了锁,其他线程只有等待。


    当创建一个ArrayList对象时候,
    ArrayList list=new ArrayList(); 
    list.add("1");
    当在多线程程序中,第一个线程调用修改对象list的时候,没有为其上锁,其他线程访问时就会报错。
    eg:list.remove("1"),然后再由其他线程访问list对象的1时就会报错。

  • 相关阅读:
    Arrays类
    spring boot 整合ehcache
    自定义注解
    图像技术经典会议
    机器学习常见优化器
    TensorFlow学习笔记(一)
    Linux 下 jupyter安装
    学生、课程、分数关系的设计与实现 Hibernate
    Hibernate连接三种数据库的配置(SQL Server、Oracle、MySQL)
    Oracle11g服务详细介绍及哪些服务是必须开启的?
  • 原文地址:https://www.cnblogs.com/sikewang/p/9627340.html
Copyright © 2011-2022 走看看