美文网首页
同步函数和同步代码块的区别:

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

作者: 骇客与画家 | 来源:发表于2018-01-10 23:51 被阅读0次

同步函数的锁是固定的this.

同步代码块的锁是任意的对象。

建议使用同步代码块。
因为同步函数的锁唯一的,只能是this

当同步代码块的锁是this时,可以简写成同步函数。

package day12;

/*
同步函数使用的锁是this;

同步函数和同步代码块的区别:
同步函数的锁是固定的this.

同步代码块的锁是任意的对象。

建议使用同步代码块。
因为同步函数的锁唯一的,只能是this

当同步代码块的锁是this时,可以简写成同步函数。
 */
class Ticket implements Runnable{ //extends Thread{
    private int num = 400;
//    Object obj = new Object();
    boolean flag = true;

    public void run()
    {
        System.out.println("this:"+this);
        if (flag)
            while (true)
            {
                synchronized(this)
                {
                    if(num>0){
                        try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); }
                        System.out.println(Thread.currentThread().getName()+"...obj..."+num--);
                    }
                }
            }
        else
            while (true)
                show();
    }

    public synchronized void show(){
        if(num>0){
            try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); }
            System.out.println(Thread.currentThread().getName()+"...function..."+num--);
        }
    }
}

public class SynFunctionLockDemo {

    public static void main(String[] args) {
        Ticket t = new Ticket();//创建一个线程任务对象。
        System.out.println("t:"+t);

        Thread t1 = new Thread(t);
        Thread t2 = new Thread(t);

        t1.start();
        try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); }
        t.flag = false;
        t2.start();
    }
}

相关文章

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

    同步函数的锁是固定的this. 同步代码块的锁是任意的对象。 建议使用同步代码块。因为同步函数的锁唯一的,只能是t...

  • 同步函数,同步代码块

    sychronized修饰函数,则该函数为同步函数,是同步的第二种表现形式。(第一种是同步代码块) 同步函数使用的...

  • 挖坑

    在同步函数和同步代码块之间,建议使用同步代码块,为什么? 监视器是什么? CPU的执行权? CPU的执行资格? 线...

  • 记一次 synchronized的使用

     下面单独对同步代码块的三种同步写法做一下区别: (1)、synchronized(this)同步代码块:1)对其...

  • JAVA线程的同步

    线程的同步: 1.同步代码块:synchronized(obj){}; 2.同步函数:public synchro...

  • Java-多线程(二)线程的状态和线程安全问题

    线程的状态 线程安全问题 案例:售票的例子。 使用同步代码块 使用同步函数 非静态同步函数使用的锁是this 静态...

  • 面试相关之 Java 并发

    1. sleep()和wait()的区别? 2. synchronized同步代码块还有同步方法本质上锁住的是谁?...

  • Java16-4 死锁

    死锁有两种情况1、同步嵌套同步方法中嵌套同步代码块或同步代码块嵌套同步代码块出现的错误

  • GCD中的栅栏函数和线程组

    一、栅栏函数(用于同步执行的block代码块) 1.同步栅栏函数 dispatch_barrier_sync(di...

  • 【进阶】 wait sleep

    wait sleep 区别 不同: wait会释放锁,而sleep不会释放锁 wait只能在同步方法和同步代码块中...

网友评论

      本文标题:同步函数和同步代码块的区别:

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