上一讲内容中我们讲到了synchronized关键字的用途,这一讲我们详细对这个关键字的用法进行详细讲解
1. synchronized关键字如果有static关键字修饰会是什么状况呢?注意加上static之后就是静态方法,它不属于任何对象,它是属于所在类的本身的。针对上一讲的程序ThreadTest4.java
修改这一个程序,在execute2()方法前面加static关键字如下所示:
编译执行结果是两个线程同时交替输出 0 - 19。package com.ahuier.Thread; public class ThreadTest4 { public static void main(String[] args) { Example example = new Example(); Thread t1 = new TheThread(example); // example = new Example(); Thread t2 = new TheThread2(example); t1.start(); t2.start(); } } class Example{ public synchronized void execute(){ for(int i = 0; i < 20; i++){ try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("example: " + i); } } public synchronized static void execute2(){ for(int i = 0; i < 20; i++){ try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("hello: " + i); } } } class TheThread extends Thread{ private Example example; public TheThread(Example example){ this.example = example; } @Override public void run() { this.example.execute(); } } class TheThread2 extends Thread{ private Example example; public TheThread2(Example example){ this.example = example; } @Override public void run() { this.example.execute2(); } }
【说明】:这个程序与之前的程序的区别是里面的方法加上了static关键字,此时static关键字加上去之后,为什么synchronized关键字的功能不起作用了呢?