java基础之线程安全问题(二)

java基础之线程安全问题(二),第1张

java基础之线程安全问题(二)

目录

一:Lock锁的使用(解决同步问题)

二:例子

 三:同步的特点

(1)同步的前提

(2)同步的好处

(3)同步的弊端


一:Lock锁的使用(解决同步问题)

虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock由于Lock是接口所以接口多态。

Lock lock = new ReentrantLock();//接口多态

方法:

void lock() 加锁

void unlock()释放锁

注意要加try( lock)和finall(unlock)

二:例子

依旧与上一篇线程安全一样用卖票例子

package day33;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Thread1 implements  Runnable {//自定义类实现 Runnable重写run方法
    int tickets=100;
    boolean b=true;
    Lock lock= new ReentrantLock();//用接口多态创建锁对象
    @Override
    public void run() {
        while(b)
            try {//加锁
            lock.lock();
            if(tickets>0){
                System.out.println(Thread.currentThread().getName()+"正在卖第"+tickets--+"张票");
            }
            if(tickets<=0){
                b=false;
            }
            }
            finally {
            lock.unlock();//释放锁
            }
    }
}
package day33;

public class SellTickets {
    public static void main(String[] args) {
        Thread1 thread1 = new Thread1();//创建继承Runnable接口类的对象
        //创建三个线程
        Thread w1 = new Thread(thread1, "窗口一");
        Thread w2 = new Thread(thread1, "窗口二");
        Thread w3 = new Thread(thread1, "窗口三");
        //启动线程
        w1.start();
        w2.start();
        w3.start();

    }
}

 

 三:同步的特点 (1)同步的前提

多个线程 多个线程使用的是同一个锁对象

(2)同步的好处

同步的出现解决了多线程的安全问题。

3)同步的弊端

当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5161587.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存