同步锁

同步锁	
--1,概述
锁是指  把共享资源 锁住
同步是指 其余线程 排队等待钥匙的现象
专门用来解决 多线程 中共享数据有隐患的问题
使用synchronized关键字表示锁
在多线程编程里, 有多条语句操做 了 共享资源 ,必定会有隐患!!!		
--2,用法
--用在方法上/同步方法
synchronized public void eat(){}
--用在代码块上/同步代码块
synchronized(锁对象){.......}
--3,改造售票代码
--implements Runnable

测试
public class C2 {
public static void main(String[] args) {
Ticket target = new Ticket();
Thread t = new Thread(target);
Thread t2 = new Thread(target);
Thread t3 = new Thread(target);
Thread t4 = new Thread(target);
t.start();
t2.start();
t3.start();
t4.start();
}
}

class Ticket implements Runnable{
int ticket = 100;
Object o = new Object();
String s ="13";
@Override
//TODO 1,如今因为多线程 中,,对于共享资源进行了抢的操做,因此共享资源不安全
//能够使用锁 来保证安全,可是牺牲性能.synchronized表示锁
//锁能够用在方法上也能够用在代码块上.
//同步方法 synchronized public void run() {
//同步代码块 -- synchronized(锁对象){有问题代码}
public void run() {
while (true){
//TODO 2,同步代码块:须要考虑两个问题
//1,锁的位置(合理位置,从开始用到用完结束) 2,锁对象(能够任务,但必须是同一个对象)
//synchronized(new Object()){//四个线程new了4把锁,不是同一个锁对象,错的
//synchronized(o){//同一个锁对象,OK
//synchronized(s){//同一个锁对象,OK synchronized (this) { if (ticket > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "--" + ticket--); } else { break; } } } }}
相关文章
相关标签/搜索