2 Day17--多线程2 + 注解

本文介绍了Java中的多线程同步锁机制,详细讲解了synchronized关键字的使用及其特点,并提供了代码示例。接着讨论了单例设计模式,包括其概念、源码分析和两种实现方式——饿汉式和懒汉式。最后,文章深入探讨了Java注解,包括注解的概念、分类、JDK注解以及元注解的详细解析,并展示了如何自定义注解及其使用。
摘要由CSDN通过智能技术生成

2.1  同步锁

把有可能出现问题的代码包起来,一次只让一个线程执行。通过sychronized关键字实现同步。

当多个对象操作共享数据时,可以使用同步锁解决线程安全问题。

2.1.1     synchronized

synchronized(对象){

    需要同步的代码;

}

2.1.1     特点

1、 前提1,同步需要两个或者两个以上的线程。

2、 前提2,多个线程间必须使用同一个锁。

3、 同步的缺点是会降低程序的执行效率,  为了保证线程安全,必须牺牲性能

4、 可以修饰方法称为同步方法,使用的锁对象是this

5、 可以修饰代码块称为同步代码块,锁对象可以任意。

 

2.1.2     改造

package seday13new;

 

public class Test4 {

    public static void main(String[] args) {

       Ticket2 t = new Ticket2();

       Thread target = new Thread(t, "窗口1");

       Thread target2 = new Thread(t, "窗口2");

       Thread target3 = new Thread(t, "窗口3");

       Thread target4 = new Thread(t, "窗口4");

target.start();

target2.start();

       target3.start();

target4.start();

    }

}

 

class Ticket2 implements Runnable {

 

private int tic = 100;

    Object obj = new Object();

 

    @Override

    public void run() {

       while (true) {

           // 把有线程安全问题的代码,用同步关键字包起来

           // 原理:用一个对象作为一把锁,给代码上锁,一个线程访问锁代码时,其他线程只能等待锁释放才能进来。

           // 多线程间要使用同一把锁才可以真的把代码锁住实现线程安全。  

// synchronized (new Object()) {//锁了不同对象

           // synchronized (obj) {//锁了同一个对象

//synchronized (Ticket2.class) {//锁了本类,针对于静态

           synchronized (this) {

              if (tic > 0) {

                  try {

                     Thread.sleep(100);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值