线程中的方法和锁定问题

时间:2016-05-05 07:39:30

标签: java multithreading methods locking synchronized

这是我的线程代码

Thread decode = new Thread(new Runnable() {
        @Override
        public void run() {
            // System.out.println("decode thread started");
            synchronized (queueLock) {
                while (true) {
                    if (!queue.isEmpty()) {
                        System.out.println(decoding());
                    }
                }
            }
        }
    });

这是我的会员字段

private PriorityQueue<String> queue = new PriorityQueue<String>();
private Object queueLock = new Object();

这是我的方法

public Character decoding() {
    String code = queue.poll();     
    Character chr;
    Character[][] key = kG.getKey();
    String binary = null;
    Character startingCharacter = code.charAt(0);
    int iK = 0;
    int ascii;

    //System.out.println(code); when i use this other threads do not start also

    for (int i = 0; i < KeyGenerator.getIr(); i++)
        if (startingCharacter == key[i][0])
            iK = i;

    for (int j = 0; j < KeyGenerator.getJr(); j++) {
        if (code.contains(String.valueOf(key[iK][j])))
            binary = binary + "1";
        else
            binary = binary + "0";
    }

    ascii = Integer.parseInt(binary, 2);
    chr = (char) (ascii + 'a');

    return chr;
}

优先级是由另一个线程使用但我使用queueLock object使其同步。 方法decoding无效docode thread !!!

1 个答案:

答案 0 :(得分:0)

我认为您可以删除queueLock对象并锁定队列本身。

您目前的代码构建方式将永远不会释放显示器 - 我认为您需要在while内部移动同步块。

或者我会考虑使用BlockingQueue,这样您就可以从代码中获取所有手动锁定。