标签:
同步(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