这一章节我们来讨论一些同步静态方法和静态代码块。
代码清单
package com.ray.deepintothread.ch02.topic_17; /** * * @author RayLee * */ public class SynchClass { public static void main(String[] args) throws InterruptedException { ThreadOne threadOne = new ThreadOne(); Thread thread = new Thread(threadOne); thread.start(); ThreadTwo threadTwo = new ThreadTwo(); Thread thread2 = new Thread(threadTwo); thread2.start(); } } class ThreadOne implements Runnable { @Override public void run() { try { MyService.updateA(); } catch (InterruptedException e) { e.printStackTrace(); } } } class ThreadTwo implements Runnable { @Override public void run() { try { MyService.updateB(); } catch (InterruptedException e) { e.printStackTrace(); } } } class MyService { private static int id = 0; public synchronized static void updateA() throws InterruptedException { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + " " + id++); Thread.sleep(50); } } public synchronized static void updateB() throws InterruptedException { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + " " + id++); Thread.sleep(100); } } }
输出:
Thread-0 0
Thread-0 1
Thread-0 2
Thread-0 3
Thread-0 4
Thread-1 5
Thread-1 6
Thread-1 7
Thread-1 8
Thread-1 9
同步静态方法,跟同步方法的性质和输出结果一致
package com.ray.deepintothread.ch02.topic_17; /** * * @author RayLee * */ public class SynchClass2 { public static void main(String[] args) throws InterruptedException { ThreadThree threadThree = new ThreadThree(); Thread thread = new Thread(threadThree); thread.start(); ThreadFour threadFour = new ThreadFour(); Thread thread2 = new Thread(threadFour); thread2.start(); } } class ThreadThree implements Runnable { @Override public void run() { try { MyService2.updateA(); } catch (InterruptedException e) { e.printStackTrace(); } } } class ThreadFour implements Runnable { @Override public void run() { try { MyService2.updateB(); } catch (InterruptedException e) { e.printStackTrace(); } } } class MyService2 { private static int id = 0; public static void updateA() throws InterruptedException { synchronized (MyService2.class) { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + " " + id++); Thread.sleep(50); } } } public static void updateB() throws InterruptedException { synchronized (MyService2.class) { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + " " + id++); Thread.sleep(100); } } } }
输出:
Thread-0 0
Thread-0 1
Thread-0 2
Thread-0 3
Thread-0 4
Thread-1 5
Thread-1 6
Thread-1 7
Thread-1 8
Thread-1 9
在同步静态方法里面的代码块时,有一点需要注意的是,在普通方法当中,我们使用的this或者new object(),在静态代码块里面是需要使用.class文件作为监视器。
总结:这一章节展示了同步静态方法和静态代码块。
这一章节就到这里,谢谢
------------------------------------------------------------------------------------
我的github:https://github.com/raylee2015/DeepIntoThread
目录:http://blog.csdn.net/raylee2007/article/details/51204573
这一章节就到这里,谢谢
------------------------------------------------------------------------------------
我的github:https://github.com/raylee2015/DeepIntoThread
目录:http://blog.csdn.net/raylee2007/article/details/51204573