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);}}}//定义一个同步类型的方法2public 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);}}}}//定义一个线程类1class MyThread7 extends Thread{Example2 example = new Example2();public MyThread7(Example2 example2){this.example = example2;}@Overridepublic void run() {this.example.execute();}}//定义一个线程类2class MyThread6 extends Thread{Example2 example = new Example2();public MyThread6(Example2 example2){this.example = example2;}@Overridepublic void run() {this.example.execute2();}}

从以上代码中可以看出:第一种方式是粗粒度的线程控制,而第二种方式是细粒度的线程控制。

人生就像爬坡,要一步一步来。

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

相关文章:

你感兴趣的文章:

标签云: