由于java的知识过于复杂繁多,使得学习者往往要花费不少的时间在上面。今天就来为大家介绍一些java的基本知识点,也就是java同步机制有哪几种实现方式以及同、异步有哪些区别?一起来看看吧。
首先是java同步机制的四种实现方式,如下:
1.ThreadLocal
2.synchronized( )
3.wait()与notify()
4.volatile
目的:都是为了解决多线程中的对同一变量的访问冲突
然后举例说明同步、异步的区别。
举个例子:普通B/S模式(同步)AJAX技术(异步)
1.同步:提交请求->等待服务器处理->处理完返回 这个期间客户端浏览器不能干任何事
2.异步:请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
3.可见,彼“同步”非此“同步”——我们说的java中的那个共享数据同步(synchronized)
一个同步的对象是指行为(动作),一个是同步的对象是指物质(共享数据)。
补充一下同步方式的详细解析。
1.ThreadLocal
ThreadLocal保证不同线程拥有不同实例,相同线程一定拥有相同的实例,即为每一个使用该变量的线程提供一个该变量值的副本,每一个线程都可以独立改变自己的副本,而不是与其它线程的副本冲突。
优势:提供了线程安全的共享对象与其它同步机制的区别:同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信;而ThreadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源,这样当然不需要多个线程进行同步了。
2.sleep() vs wait()
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
wait()是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
(如果变量被声明为volatile,在每次访问时都会和主存一致;如果变量在同步方法或者同步块中被访问,当在方法或者块的入口处获得锁以及方法或者块退出时释放锁时变量被同步。)
以上就是关于java同步机制有哪几种实现方式以及同、异步有哪些区别的主要内容了。如果你对java知识感兴趣,想要了解更多java基础和常见问题,敬请关注奇Q工具网。
推荐阅读: