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

2014-11-24 02:57:46 · 作者: · 浏览: 1

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

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();

}

}

摘自:找一种安静