字符串文字同步

时间:2013-10-03 18:32:42

标签: java

我正在尝试同步一个字符串文字,以便我可以控制我的线程的执行但由于某些原因不起作用..

同步的方式有问题吗?

package scratch1;

public class OrderedThread {
    public static void main(String[] args){
        RunThread first, second, third;
        OrderedThread orderedthread = new OrderedThread();
        first = new RunThread("One",orderedthread);
        second = new RunThread("Two",orderedthread);
        third = new RunThread("Three",orderedthread);
        second.start();
        first.start();
        third.start();
    }

    public void display(String msg){
        synchronized(msg){
            for (int i = 1; i <= 20; i++){
                System.out.println("Name = "+ msg);
            }
        }
    }

}

class RunThread extends Thread{
    String name;
    OrderedThread orderT;
    RunThread(String name, OrderedThread orderT){
        this.name = name;
        this.orderT = orderT;
    }

    public void run(){
        orderT.display(name);
    }
}

1 个答案:

答案 0 :(得分:1)

同步点是访问共享资源。您的线程应该在其他线程尝试访问的对象上获取监视器。在您的情况下,每个线程获取一个不同的对象的监视器,因此它们都不会阻塞。

如果您将文字"One"传递给构造函数

first = new RunThread("One",orderedthread);
second = new RunThread("One",orderedthread);
third = new RunThread("One",orderedthread);

然后你会看到按顺序执行。每个线程都必须在另一个线程开始之前完成其for循环(在synchronized块内)。这是因为每个线程在同一个String对象上同步。

更好的是,使用其中一个充当锁的许多java.util.concurrent类。例如,Lock