码迷,mamicode.com
首页 > 其他好文 > 详细

同步和异步

时间:2016-08-01 15:39:37      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

同步(synchronous):打电话

异步(asynchronous):发短信

在AJAX中,用户在通过浏览器对服务器发出request,服务器找到相应的资源,然后才能返回给用户response(一个不可见层,浏览器端通过相应的js和返回内容进行显示),在中间的这段时间,用户是可以用浏览器做其他的事情,比如再次向服务器发送另一个request。

在B/S中,用户在通过浏览器对服务器发出request,服务器找到相应的资源,返回给用户一个response,但是它是典型的click-reflash模式,用户点击发出请求,直到服务器做出响应后,页面刷新,用户才可以做其他的操作,中间这段时间,是不允许用户进行其他操作的。

在java多线程中,使用同步的话,需要实现Runable接口,因为比起继承Thread类,实现Runable接口可以实现数据的共享,比如售票,我们总共有5张票,并且假定票数据是放在线程类里的一个成员变量,如果用继承Thread类来实现的话,我们将卖出15张,而用Runable接口实现我们将只卖五张,

但还可能有个问题就是,俩个线程同时访问票数据,这样会出现非线程安全的问题,比如俩个售票窗口在售票以后,有可能都显示出余票还省4张,所以我们需要去锁死这个线程,即在一个线程在使用数据的时候,其他的线程只能眼巴巴的看着数据,而不能对它进行操作,只有等这个线程结束,系统将数据释放以后,其他的线程才可以使用,可以使用俩种方法,一种是使用synchronized关键字,又分为同步代码块和同步方法,同步代码块是指在票数减少的代码出,用关键字进行修饰,同步方法,是用关键字修饰卖票的方法,而在run()方法中,直接调用修饰过的卖票方法,还有一种方法是原子操作,依旧是用关键字修饰,具体会在后续中写到。这样我们就可以实现操作和数据的同步。

在Java程序执行中,一个Java程序至少会启动2个线程:一个主线程以及一个垃圾回收线程。

关于线程的理解,可以参考IBM刘欣写的《我是一个线程》http://mp.weixin.qq.com/s?__biz=MjM5NzA1MTcyMA==&mid=403498894&idx=2&sn=219c1a6001b5bb7e6bdc7963b1af8450&scene=2&srcid=0330UDNmQ,关于多线程的同步和异步,可以参考苏若年的随笔http://www.cnblogs.com/dennisit/archive/2013/02/24/2925288.html

最后,又饿了。

同步和异步

标签:

原文地址:http://www.cnblogs.com/DaiLeGeMeng/p/5725630.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!