Java 从线程继承的类使CPU 100%运行
我的应用程序中有这样的代码,我希望在后台运行:Java 从线程继承的类使CPU 100%运行,java,linux,multithreading,keyboard,Java,Linux,Multithreading,Keyboard,我的应用程序中有这样的代码,我希望在后台运行: import java.awt.*; import java.awt.datatransfer.*; class Main extends Thread implements ClipboardOwner { private Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard(); public void run() { Transf
import java.awt.*;
import java.awt.datatransfer.*;
class Main extends Thread implements ClipboardOwner {
private Clipboard sysClip = Toolkit.getDefaultToolkit().getSystemClipboard();
public void run() {
Transferable trans = sysClip.getContents(this);
regainOwnership(trans);
System.out.println("Listening to board...");
while (true) { }
}
public static void main(String[] args) {
Main b = new Main();
b.start();
}
//............
它侦听Ctrl+C
,并在按下此组合键后打印剪贴板的内容。然而,它使CPU始终运行99%。如果我删除while(true){}
,那么应用程序将立即停止
我试图以java-jarmyapp.jar&
的形式启动它,但结果是一样的。我想在Windows上也是一样,尽管我现在关心Linux
对此我该怎么办?您有一个线程运行无限循环。这正是那种将100%的CPU用于免费的事情。如果没有其他问题,在循环中放置几秒钟的
Thread.sleep()
,将降低CPU使用率。您有一个线程运行无限循环。这正是那种将100%的CPU用于免费的事情。如果没有其他问题,在循环中放置几秒钟的Thread.sleep()
,将降低CPU使用率。您有一个线程运行无限循环。这正是那种将100%的CPU用于免费的事情。如果没有其他问题,在循环中放置几秒钟的Thread.sleep()
,将降低CPU使用率。您有一个线程运行无限循环。这正是那种将100%的CPU用于免费的事情。如果没有其他问题,在循环中放置几秒钟的Thread.sleep()
,将降低CPU使用率。您应该避免使用永久循环检查变量是否已更改,而是使用侦听器。更准确地说,a将允许您在剪贴板发生更改时执行代码
应该是这样的:
Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(
new FlavorListener() {
@Override
public void flavorsChanged(FlavorEvent e) {
System.out.println("Clipboard contents: " + e.toString());
}
});
您应该避免使用永恒循环来检查变量是否已更改,而是使用侦听器。更准确地说,a将允许您在剪贴板发生更改时执行代码 应该是这样的:
Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(
new FlavorListener() {
@Override
public void flavorsChanged(FlavorEvent e) {
System.out.println("Clipboard contents: " + e.toString());
}
});
您应该避免使用永恒循环来检查变量是否已更改,而是使用侦听器。更准确地说,a将允许您在剪贴板发生更改时执行代码 应该是这样的:
Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(
new FlavorListener() {
@Override
public void flavorsChanged(FlavorEvent e) {
System.out.println("Clipboard contents: " + e.toString());
}
});
您应该避免使用永恒循环来检查变量是否已更改,而是使用侦听器。更准确地说,a将允许您在剪贴板发生更改时执行代码 应该是这样的:
Toolkit.getDefaultToolkit().getSystemClipboard().addFlavorListener(
new FlavorListener() {
@Override
public void flavorsChanged(FlavorEvent e) {
System.out.println("Clipboard contents: " + e.toString());
}
});
尝试在while循环中添加Thread.sleep()。不要扩展线程。实现runnable更好看一看@Alex尝试在while循环中添加Thread.sleep()。不要扩展线程。实现runnable更好看一看@Alex尝试在while循环中添加Thread.sleep()。不要扩展线程。实现runnable更好看一看@Alex尝试在while循环中添加Thread.sleep()。不要扩展线程。实现runnable更好看看@Alex它可以睡眠的最长时间是0.5秒。使用线程睡眠有意义吗?@Alex是的。半秒钟对于cpu来说是一段很长的时间。@Alex您应该能够将任意长参数传递给。是吗?我认为只从几秒钟开始就足够了。将Thread.sleep(1)放入循环中,注意它是如何降低CPU使用率的。它可以睡眠的最大时间是0.5秒。使用线程睡眠有意义吗?@Alex是的。半秒钟对于cpu来说是一段很长的时间。@Alex您应该能够将任意长参数传递给。是吗?我认为只从几秒钟开始就足够了。将Thread.sleep(1)放入循环中,注意它是如何降低CPU使用率的。它可以睡眠的最大时间是0.5秒。使用线程睡眠有意义吗?@Alex是的。半秒钟对于cpu来说是一段很长的时间。@Alex您应该能够将任意长参数传递给。是吗?我认为只从几秒钟开始就足够了。将Thread.sleep(1)放入循环中,注意它是如何降低CPU使用率的。它可以睡眠的最大时间是0.5秒。使用线程睡眠有意义吗?@Alex是的。半秒钟对于cpu来说是一段很长的时间。@Alex您应该能够将任意长参数传递给。是吗?我认为只从几秒钟开始就足够了。将Thread.sleep(1)放在循环中,注意它是如何降低CPU使用率的。我已经看到了这段代码,但它不起作用。你能给出一个完整的工作示例吗?我不知道,但这些人有一些建议:FlavorListener在哪里?我已经看到了这段代码,但它不起作用。你能给出一个完整的工作示例吗?我不知道,但这些人有一些建议:FlavorListener在哪里?我已经看到了这段代码,但它不起作用。你能给出一个完整的工作示例吗?我不知道,但这些人有一些建议:FlavorListener在哪里?我已经看到了这段代码,但它不起作用。你能给出一个完整的工作示例吗?我不知道,但这些人有一些建议:那你的听众在哪里?