JAVA的synchronized关键字学习
来源:互联网 发布:矩阵有分配律吗 编辑:程序博客网 时间:2024/05/16 17:35
synchronized方法是Java提供的一种锁机制。
2synchronized锁住的是同一个对象。
直接上例子:
package com.tj.common.imulation12306;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class Simulation12306 implements Runnable {// 假设总共有1000张票public static int tickets = 100;public Lock lock = new ReentrantLock();public static void main(String[] args) throws Exception {// TODO Auto-generated method stubSimulation12306 sim12 = new Simulation12306();Thread t = new Thread(sim12);Thread tb = new Thread(sim12);Thread tc = new Thread(sim12);t.start();tb.start();tc.start();}// 实现Runnable的run方法,让每个线程买10张票@Overridepublic void run() {buyTickets();}// 买票的方法,成功返回true,否则返回falsepublic synchronized void buyTickets() {int i;for (i = 1; i <= 10; i++) {System.out.println("线程" + Thread.currentThread().getName() + "在买第" + i + "张票");}}}
这样是可以锁住buytickets方法的,每个线程都会买10张。买完之后,下一个线程才会工作。
但是,如果这样写:
package com.tj.common.imulation12306;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class Simulation12306 implements Runnable {// 假设总共有1000张票public static int tickets = 100;public Lock lock = new ReentrantLock();public static void main(String[] args) throws Exception {// TODO Auto-generated method stubSimulation12306 sim12 = new Simulation12306();Thread t = new Thread(new Simulation12306());Thread tb = new Thread(new Simulation12306());Thread tc = new Thread(new Simulation12306());t.start();tb.start();tc.start();}// 实现Runnable的run方法,让每个线程买10张票@Overridepublic void run() {buyTickets();}// 买票的方法,成功返回true,否则返回falsepublic synchronized void buyTickets() {int i;for (i = 1; i <= 10; i++) {System.out.println("线程" + Thread.currentThread().getName() + "在买第" + i + "张票");}}}
会发现,其实锁机制没有生效!这是因为,每一个Java对象有一个对象锁,Java通过同步方法synchronized来获得这个锁。
仔细比较就会发现,两段代码的不同之处在于:Thread中使用的分别是同一个对象和3个对象。
在使用3个对象的时候,由于这3个对象有不同的对象锁,所以根本锁不住这个 所谓的同步方法。
0 0
- JAVA的synchronized关键字学习
- java的synchronized关键字
- Java的关键字synchronized
- java的synchronized关键字
- Java synchronized关键字学习一
- Java synchronized关键字学习二
- JAVA的关键字:final && synchronized
- 关于java的synchronized 关键字
- synchronized 关键字的java应用
- java synchronized关键字的详解
- Java synchronized关键字的认识
- Java Synchronized关键字的使用
- java synchronized关键字的用法
- java synchronized关键字的用法
- Java synchronized关键字的用法
- java synchronized关键字的用法
- Java synchronized 关键字的讲解
- java synchronized关键字的用法
- sql语句进阶教程(学习sql这一篇就够了)
- Linux下gcc编译生成动态链接库*.so文件并调用它
- Nodejs(六)
- iOS程序添加icon图标/启动画面的制作
- Add Two Numbers
- JAVA的synchronized关键字学习
- LinearLayout内的权重属性 weight
- More Effective C++----(8)理解各种不同含义的new和delete
- 对称加密与非对称加密
- 22.Eclipse 的 Java Web 项目环境搭建 - IntelliJ IDEA 使用教程
- 第一章 JAVA入门(下载安装JDK JRE)
- JVM类加载机制详解(一)JVM类加载过程
- 栈+括号配对 51Nod1478 括号序列的最长合法子段
- 获取客户端真实IP——request.getHeader("x-forwarded-for")