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 ,