admin 管理员组文章数量: 1086019
同步锁(synchronized)
同步锁
概念:
-
把有可能出现问题的代码包起来,一次只让一个线程执行。通过sychronized关键字实现同步。
-
当多个对象操作共享数据时,可以使用同步锁解决线程安全问题。
synchronized(对象){需要同步的代码;}
特点:
- 前提1,同步需要两个或者两个以上的线程。
- 前提2,多个线程间必须使用同一个锁。
- 同步的缺点是会降低程序的执行效率, 为了保证线程安全,必须牺牲性能。
- 可以修饰方法称为同步方法,使用的锁对象是this。
- 可以修饰代码块称为同步代码块,锁对象可以任意。
测试:
public class 同步锁synchronized {public static void main(String[] args) {ticket TT =new ticket();Thread t1 =new Thread(TT,"售票员1");Thread t2 =new Thread(TT,"售票员2");t1.start();t2.start();}}class ticket implements Runnable{private int tic =400;@Overridepublic void run() {// 把有线程安全问题的代码,用同步关键字包起来// 原理:用一个对象作为一把锁,给代码上锁,一个线程访问锁代码时,其他线程只能等待锁释放才能进来。// 多线程间要使用同一把锁才可以真的把代码锁住实现线程安全。// synchronized (new Object()) {//锁了不同对象// synchronized (obj) {//锁了同一个对象//synchronized (Ticket2.class) {//锁了本类,针对于静态while (true) {synchronized (this) {if (tic > 0) {//执行卖票操作System.out.println(Thread.currentThread().getName()+"-----"+tic--);}}}}
}
本文标签: 同步锁(synchronized)
版权声明:本文标题:同步锁(synchronized) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1686729583a30211.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论