使用同步代码块后,多线程中的输出不可预测

时间:2017-09-17 18:42:14

标签: java multithreading

我在2线程对象上调用start方法,其中我使用的是同步代码块,其中我调用了Synchronized方法首先删除。我没有随机输出。我的代码如下:

import java.util.*;
public class NameList {
    private List names =new LinkedList();

    public  synchronized void add(String name)
    {   System.out.println(Thread.currentThread().getName());
        names.add(name);
    }

    public synchronized String removeFirst()
    {   System.out.println(names.size());
        System.out.println(Thread.currentThread().getName());
        if (names.size() > 0)
        {   System.out.println(Thread.currentThread().getName());
            return (String) names.remove(0);
        }
        else
        return null;
    }

    public static void main(String[] args) {
        final NameList nl = new NameList();
        nl.add("Ozymandias");
        class NameDropper extends Thread {
            public void run() {
                synchronized(this)
                {   String name = nl.removeFirst();
                    System.out.println(name);
                }
            }
        }
        Thread t1 = new NameDropper();
        t1.setName("l1");
        Thread t2 = new NameDropper();
        t2.setName("l2");
        t1.start();
        t2.start();
    }
}

我每次都会得到不同的输出。 任何人都可以帮助我理解这种多线程行为。

提前致谢。

0 个答案:

没有答案