美文网首页Java
Java16-2 多线程同步函数及区别

Java16-2 多线程同步函数及区别

作者: 第二套广播体操 | 来源:发表于2018-11-06 22:24 被阅读0次

多线程函数引用的锁为this

同步函数:函数上加同步修饰关键字
同步函数使用的锁:函数需要被对象调用,哪个对象不确定 就用this来表示
同步函数使用的锁就是this

  public synchronized   void run() {

                while (tacket>0)
                {
                    System.out.println("线程销售: "+Thread.currentThread().getName()+"销售票次: "+tacket);
                    tacket--;
                }

    }

静态多线程函数
static方法随着类加载,这时不一定有该类对象,但一定有该类的字节码对象
这个对象简单的表示为类名.class

即静态多线程函数的引用锁为字节码对象

class Tacket implements Runnable
{  private static int tacket=1000;
  boolean flog=true;
  Object object=new Object();

    @Override
    public void run() {
        if (flog) {
            synchronized (object) {
                 while (tacket > 0)
                   System.out.println(Thread.currentThread().getName() +"同步代码块"+ "剩余数" + tacket--);
            }
        }
        else{sale();}
    }
    public  static  synchronized void sale(){
        while (tacket > 0)
            System.out.println(Thread.currentThread().getName() +"同步方法"+ "剩余数" + tacket--);
    }
}

public class SaleTacket {
    public static void main(String[] args) throws InterruptedException {
        //线程任务对象
        Tacket tacket=new Tacket();
        Thread t1=new Thread(tacket,"线程1");
        Thread t2=new Thread(tacket,"线程2");
        t1.start();
        Thread.sleep(2);
        tacket.flog=false;
        t2.start();
    }
}

不同锁无法实现同步
结果:
线程2同步方法剩余数3
线程2同步方法剩余数2
线程2同步方法剩余数1
线程1同步代码块剩余数0

 synchronized (SaleTacket.class) {
                 while (tacket > 0)
                   System.out.println(Thread.currentThread().getName() +"同步代码块"+ "剩余数" + tacket--);
            }

和静态同步方法同锁

同步函数和同步代码块区别:

同步函数只能使用this锁
同步代码块可以使用任意对象锁
如果一个类中只需要一个锁,这时可以考虑同步函数,使用this,写法简单
如果一个类中需要多个锁,或者多个函数中需要用同一个锁,就使用同步代码块

相关文章

  • Java16-2 多线程同步函数及区别

    多线程函数引用的锁为this 同步函数:函数上加同步修饰关键字同步函数使用的锁:函数需要被对象调用,哪个对象不确定...

  • iOS 多线程基础

    转自:iOS 多线程基础 - 简书 多线程同步和异步的区别?IOS中如何实现多线程的同步? 异步:可以同时执行多条...

  • Java基础day11笔记:多线程同步函数|synchroniz

    11-多线程(多线程-同步函数) 银行类: 储户类: 主函数中开两个线程: 运行结果: 但...

  • 5月份第一周学习安排

    学习内容: java多线程及线程同步的方法(使用) java多线程各种同步方法的原理和优缺点 java多线程设计模...

  • iOS_2016最新版面试题(附答案)

    每天四道题,让精彩填满生活... 1、多线程同步和异步的区别。iOS如何实现多线程的同步? 答:同步就是指一个线程...

  • iOS多线程 线程同步 如何加锁

    本文代码 demo地址 一、 常见的多线程方案 GCD中的一些常见函数 术语 队列及线程使用 二、 线程同步(加锁...

  • 学习OC

    1.函数和队列的区别?同步函数和异步函数的区别?串行队列和并行队列的区别?什么是栅栏函数 且有什么注意点? 栅栏方...

  • iOS开发(12)多线程

    一、多线程 1、iOS中的常见多线程方案 2、GCD的常用函数a) GCD中有2个用来执行任务的函数 用同步的方式...

  • 神奇的"主线程主队列,异步提交任务"

    回想一下同步、异步,多线程,任务队列之间到底有何区别。

  • Java基础17-多线程

    概述 本文主要讲java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的线程函数用法等。首先让我们来了...

网友评论

    本文标题:Java16-2 多线程同步函数及区别

    本文链接:https://www.haomeiwen.com/subject/vzdpxqtx.html