当前位置:编程学习 > JAVA >>

java 学习之路——线程2(synchronized静态代码块)

 

实现同步方法的方式有两种:

  1.用synchronized关键字修饰的方法可以实现线程的同步;

  2.用synchronized代码块修饰的部分实现线程的同步。

以下为第二种方式的实现:

 

 

package com.lcq.ThreadTest; 

 

 

/**

 * 类名:ThreadTest6

 * 功能:线程的同步问题,使用关键字synchronized静态代码块修饰

 * 时间:

 * 结果:当一个synchronized块被调用时,该类的其他方法无法调用

 * @version 1.0

 * @author lcq

 */ 

 

 

public class ThreadTest6 { 

 

    public static void main(String[] args) { 

         

        Example2 example = new Example2(); 

         

        //定义两个线程访问同一个资源 

        Thread t1 = new MyThread6(example); 

        Thread t2 = new MyThread7(example); 

         

        //分别调用资源类的同步方法 

        t1.start(); 

        t2.start(); 

    } 

 

class Example2{ 

    /*

     * 定义一个同步类型的方法1

     */ 

    private Object obj = new Object(); 

    //private Object obj2 = new Object(); 

     

    public void execute(){ 

        synchronized(obj){ 

            for (int i = 0; i <20; i++) { 

            try { 

                Thread.sleep(500); 

            } catch (InterruptedException e) { 

                e.printStackTrace(); 

            } 

            System.out.println("Hello :" + i); 

        } 

        } 

         

         

    } 

     

    //定义一个同步类型的方法2 

    public void execute2(){ 

        synchronized (obj) { 

            for (int i = 0; i <20; i++) { 

            try { 

                Thread.sleep(500); 

            } catch (InterruptedException e) { 

                e.printStackTrace(); 

            } 

            System.out.println("World :" + i); 

        } 

 

        } 

            } 

     

     

 

//定义一个线程类1 

class MyThread7 extends Thread{ 

     

    Example2 example = new Example2(); 

    public MyThread7(Example2 example2){ 

        this.example = example2; 

    } 

    @Override 

    public void run() { 

        this.example.execute(); 

    } 

 

//定义一个线程类2 

class MyThread6 extends Thread{ 

     

    Example2 example = new Example2(); 

    public MyThread6(Example2 example2){ 

        this.example = example2; 

    } 

    @Override 

    public void run() { 

        this.example.execute2(); 

    } 

}   

 

摘自:找一种安静

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,