簡體   English   中英

多線程問題

[英]Multithreading problems

我正在嘗試更多地了解 Java 中的多線程,但我的努力已停止在此代碼上:

package io.nlaz.test.commands;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;

import java.util.List;

public class test implements TabExecutor {
        @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        try {
            Thread a24 = new Thread(() -> {
                try {
                    Thread.sleep(1000);
                    sender.sendMessage("2");
                    Thread.sleep(2000);
                    sender.sendMessage("4");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });

            Thread a35 = new Thread(() -> {
                try {
                    Thread.sleep(3000);
                    sender.sendMessage("3");
                    Thread.sleep(2000);
                    sender.sendMessage("5");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });

            sender.sendMessage("1");
            a24.start();
            a35.start();
        } catch (Exception e) { e.printStackTrace(); }
        return false;
    }

    @Override
    public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
        return null;
    }
}

當代碼運行時,它應該每秒發送一條最多計數 5 條的消息。 但是在運行時它會達到 2,然后等待 a24 線程完成,然后執行 a35。 我已經查找了可能的解決方案,但是它們都導致主線程暫停,或者與我已經遇到的完全相同的問題。

我確實有一部分可能是因為我使用的是Thread.sleep()而不是Thread.currentThread().wait()之類的東西。 但是,當我使用該方法時,我收到一條錯誤java.lang.IllegalMonitorStateException: current thread is not owner 任何建議都有幫助,謝謝!

不要Thread與 Bukkit 的插件一起使用。 Spigot 有自己的線程系統。

BukkitTask task = Bukkit.getScheduler().runTaskTimer(myPlugin, new Runnable() {
   private int timer = 4;

   @Override
   public void run() {
      if(timer == 4 || timer ==2) {
          sender.sendMessage("Time: " + timer);
      }
      if(timer == 0) {
          task.cancel();
      }
      timer--;
   }
});

文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM