您现在的位置是:课程教程文章
synchronized在java中的修饰
2023-12-15 21:15课程教程文章 人已围观
-
JavaScript语法零基础入门
JavaScript语法零基础入门获取课件直接添加博学谷微信号:bxgcourse;也可以直接加入博学谷在线学习交流... -
JavaScript基础入门教程
JavaScript基础入门教程添加源妹儿VX:【ymsdsss】可获取更多学习资料,加入免费学科答疑群,还可获得... -
2019Redis从入门到大师【千锋Java达摩院】
2019Redis从入门到大师【千锋Java达摩院】获取视频资料源码,请添加官方指定qq:2377443170 课程介绍: Redis是NoSQL数据库,... -
2020新版零基础IDEA入门到高级视频教程j
2020新版零基础IDEA入门到高级视频教程j...
我们说synchronized让一个线程运行时,保证其安全性。那么在其中synchronized都可以进行哪些操作呢?本篇主要讲的是synchronized的修饰用法,能够对普通方法、静态方法、代码块进行操作。下面将分别对这三种修饰情况,带来代码方面的用法展示,一起来看看synchronized的修饰用法吧。
1.修饰普通方法
public class SynTest8 implements Runnable { public static void main(String[] args) throws InterruptedException { SynTest8 instance1 = new SynTest8(); Thread thread1 = new Thread(instance1); thread1.start(); } @Override public void run() { if(Thread.currentThread().getName().equals("Thread-0")) { method1(); }else { method2(); } } public synchronized void method1() { try { System.out.println(Thread.currentThread().getName() + "进入到了同步方法1"); Thread.sleep(2000); System.out.println(Thread.currentThread().getName() + "离开同步方法1"); } catch (InterruptedException e) { e.printStackTrace(); } } public synchronized void method2() { try { System.out.println(Thread.currentThread().getName() + "进入到了同步方法2"); Thread.sleep(2000); System.out.println(Thread.currentThread().getName() + "离开同步方法2"); } catch (InterruptedException e) { e.printStackTrace(); } } }
2.修饰静态方法
public class SynTest6 implements Runnable { public static void main(String[] args) throws InterruptedException { SynTest6 instance1 = new SynTest6(); SynTest6 instance2 = new SynTest6(); Thread thread1 = new Thread(instance1); Thread thread2 = new Thread(instance2); thread1.start(); thread2.start(); } @Override public void run() { method1(); } public synchronized static void method1() { try { System.out.println(Thread.currentThread().getName() + "进入到了静态方法"); Thread.sleep(2000); System.out.println(Thread.currentThread().getName() + "离开静态方法,并释放锁"); } catch (InterruptedException e) { e.printStackTrace(); } } }
在这个例子中我们实例化了两个对象instance1和instance2,并且存放在了两个不同的线程中,我们测试一下访问同一个static同步方法你会发现。即使是实例不同,锁也会生效,也就是同一时刻只能有一个线程进去。
3.修饰代码块
一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞。
/** * 同步线程 */ class SyncThread implements Runnable { private static int count; public SyncThread() { count = 0; } public void run() { synchronized(this) { for (int i = 0; i < 5; i++) { try { System.out.println(Thread.currentThread().getName() + ":" + (count++)); Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } } public int getCount() { return count; } }
以上就是synchronized在java中修饰的用法,当线程中的方法和代码块需要修饰时,我们可以选择synchronized的方法进行解决。看完本篇后,就可以对代码部分进行试验了。
课程教程:synchronized在java中的修饰上一篇:js中字符串连接方式
下一篇:没有了