多线程的同步问题代码实例

来源:互联网 发布:ubuntu安装文件格式 编辑:程序博客网 时间:2024/05/16 14:41

在多个线程执行同一段代码时,由于数据共享的原因,可能出现线程间互相干扰的情况,可以用同步锁对同步问题进行处理,代码如下:

public class SynchronizedDemo {private static int i = 0;public static void main(String[] args) {Thread[] ths = new Thread[5];for(int i = 0; i < ths.length; i++) {ths[i] = new Thread(new MyRunnable());ths[i].start();}for (Thread th : ths) {try {th.join();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("i:" + i);}static class MyRunnable implements Runnable {@Overridepublic void run() {synchronized(SynchronizedDemo.class) {//当i为0时,才加1if (i == 0) {try {//为模拟出多个线程间互相干扰,人为使得线程休眠1秒Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}i++;}}}}}
运行该程序n次,只有一种打印结果,打印结果:

i:1

如果去掉同步锁synchronized(SynchronizedDemo.class),运行该程序n次,有多种打印结果:

i:5

i:4

显然i:1是需要的结果,这个示例其实就是单例设计模式中加同步锁的原因,只改变i的值一次(唯一对象实例)

原创粉丝点击