线程同步是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低。线程异步:访问资源时在空闲等待时同时访问其他资源,实现多线程机制。简单来说,同步必须执行到底之后才能执行其他操作,而异步可以任意操作。
在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法。按照这个定义,其实绝大多数函数都是同步调用。但是一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。例如Window API函数SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。
当对方处理完毕以后,该函数才把消息处理函数所返回的LRESULT值返回给调用者。在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入,由于CPU时间调度上的问题,写入数据会被多次的覆盖,所以就要使线程同步。
异步双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息,如开始位,同时在结束时有停止位。与同步相对应,异步指的是让CPU暂时搁置当前请求的响应,处理下一个请求,当通过轮询或其他方式得到回调通知后,开始运行。
延伸阅读
线程同步的三种方式
名列前茅种:同步代码块:使用synchronized修饰的代码块叫做同步代码块,同步代码块会被JVM自动加上内置锁,从而实现同步(同一时间只能有同一个线程执行)
第二种:同步方法:使用synchronized修饰的方法叫同步方法,java的每个对象都有一个内置锁,当用此关键字修饰方法的时候,内置锁会保护整个方法,在调用该方法前,需要获得内置锁,否则就处于阻塞状态
第三种:Lock锁机制:通过创建Lock锁对象,使用lock()方法加锁,使用unlock()方法解锁,来保护指定的代码块
文章标题:线程同步和异步的区别是什么,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37967