同步机制二:同步方法

简介: 同步机制二:同步方法

同步机制二:同步方法

WindowTest3类

package com.day0206_1;
/**
 * 使用同步方法解决实现Runnable接口的线程的安全问题
 *
 * 1.关于同步方法仍然涉及到同步监视器,只是不需要我们显示的声明。
 * 2.非静态的同步方法,同步监视器是:this。
 *     静态的同步方法,同步监视器是:当前类本身。
 *
 */
class Window3 implements Runnable{
    private  int ticket=100;
    @Override
    public void run() {
        while(true){
               show();
        }
    }
    private synchronized void show(){//同步监视器:this
//        synchronized(this) {
            if (ticket > 0) {
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + ":" + "买票,票号为:" + ticket);
                ticket--;
            }
//        }
    }
}
public class WindowTest3 {
    public static void main(String[] args) {
        Window3 w=new Window3();
        Thread t1 = new Thread(w);
        Thread t2 = new Thread(w);
        Thread t3 = new Thread(w);
        t1.setName("窗口一");
        t2.setName("窗口二");
        t3.setName("窗口三");
        t1.start();
        t2.start();
        t3.start();
    }
}

WindowTest4类

package com.day0206_1;
/**
 * 使用同步方法解决继承Thread类的方式中的线程安全问题
 *
 *
 */
class Window4 extends Thread{
    private static int ticket=100;
    @Override
    public void run() {
        while(true){
                show();
        }
    }
    private static synchronized void show(){//同步监视器:Window4.class
//        private synchronized void show(){//同步监视器:t1、t2、t3。此种解决方式是错误的
        if (ticket > 0) {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + ":" + "买票,票号为:" + ticket);
            ticket--;
        }
    }
}
public class WindowTest4 {
    public static void main(String[] args) {
        Window4 t1=new Window4();
        Window4 t2=new Window4();
        Window4 t3=new Window4();
        t1.setName("窗口一");
        t2.setName("窗口二");
        t3.setName("窗口三");
        t1.start();
        t2.start();
        t3.start();
    }
}
相关文章
|
设计模式 安全 算法
线程同步
线程同步
53 0
同步机制一:同步代码块
同步机制一:同步代码块
50 0
|
安全 Windows
【线程安全问题】线程互斥与线程同步技术(上)
【线程安全问题】线程互斥与线程同步技术
【线程安全问题】线程互斥与线程同步技术(上)
|
安全 程序员
【线程安全问题】线程互斥与线程同步技术(下)
【线程安全问题】线程互斥与线程同步技术
3.8~3.14 线程同步
3.8~3.14 线程同步
77 0
3.8~3.14 线程同步
|
安全 Java
多线程编程之线程的同步机制(上): Synchronized同步方法
多线程中的同步,指的是如何开发出线程安全的程序或者应用,也就是得解决非线程安全所带来的一些相关问题-----脏读。
166 0
多线程编程之线程的同步机制(上): Synchronized同步方法
|
缓存 Java
多线程编程之线程的同步机制(下): Synchronized同步代码块
上一篇文章讲了多线程编程中Synchronized同步方法的相关内容,Synchronized除了同步方法之外还可以同步语句块,这篇文章就介绍Synchronized如何同步语句块。
66 0
多线程编程之线程的同步机制(下): Synchronized同步代码块
|
安全
线程同步 (二)
线程同步 (二)
172 0
线程同步 (二)
C#线程同步深入
C#线程同步问题深究及解决方案
146 0
C#线程同步深入