A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王飞 中级黑马   /  2012-7-16 23:41  /  1227 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个进程中至少有一个线程
实现了Runnable接口后,里面的变量就只有run方法里面的一份,也就相当于所以实现了Runnable接口类的对象都共享一份数据


同步锁:同步有两种表现形式:同步代码快和同步函数
因为同步函数需要被对象调用。所以同步函数都有一个所属对象引用。就是this。
所以同步函数使用的锁是this。

如果同步方法是静态的:因为没有对象的调用,那么使用的锁是该方法所在类的字节码文件对象。 类名.class

同步的前提:如果没有同步就看有没有符合下面要求
1,必须要有两个或者两个以上的线程。-------------------------------没有那就和单线程没什么区别咯,也就失去了同步的意义
2,必须是多个线程使用同一个锁。-----重点            
必须保证同步中只能有一个线程在运行。

同步的利与弊:
利:解决了多线程的安全问题。--------------------------------------------例如不会对同一个对象操作完后另一个使用者不知道的情况
弊:多个线程需要判断锁,较为消耗资源,   ------------------------------------------------每次进入同步的时候都要判断里面有没有程序在运行,有就进不去(因为没有进去的锁),直到里面的程序运行完把锁释放掉才行,这个时候拿上锁的就可以进去了,然后在锁上,让后面的进不来

synchronized(对象) :--------------------------------  此时的对象可以是任意对象,但是同一个同步使用的一定是同一对象
同一个锁上的被等待线程,可以被同一个锁上notify唤醒。不可以对不同锁中的线程进行唤醒。--------------------------------------------也就是说,等待和唤醒必须是同一个锁。

1 个回复

倒序浏览
您需要登录后才可以回帖 登录 | 加入黑马