如何减少线程';s start()方法在java中的执行时间
我试图实现一个实时执行应用程序,其中线程是启动器,它将调用如何减少线程';s start()方法在java中的执行时间,java,android,multithreading,midi,javax.sound.midi,Java,Android,Multithreading,Midi,Javax.sound.midi,我试图实现一个实时执行应用程序,其中线程是启动器,它将调用JavaMIDI播放一些音乐(即在Runnable接口的重写run()方法中实现的执行语句) 但是线程启动(thread.start()method)本身需要2毫秒以上的时间,这使得应用程序的执行大大延迟。我使用thread是因为有时播放器应用程序必须在两者之间重新启动 是否有任何方法可以减少start()方法的执行时间。我也试着优先考虑线程,但仍然不起作用。我只希望延迟几微秒。任何帮助都将不胜感激。我正在使用一个javafxml应用程序
JavaMIDI
播放一些音乐(即在Runnable接口的重写run()
方法中实现的执行语句)
但是线程启动(thread.start()
method)本身需要2毫秒以上的时间,这使得应用程序的执行大大延迟。我使用thread是因为有时播放器应用程序必须在两者之间重新启动
是否有任何方法可以减少start()
方法的执行时间。我也试着优先考虑线程,但仍然不起作用。我只希望延迟几微秒。任何帮助都将不胜感激。我正在使用一个javafxml应用程序
,其中一个按钮单击事件正在处理所有这些
这是我的密码:
@FXML
private static NotesPlayer playerObj=new NotesPlayer();
@FXML
private void handlePlayButtonAction(ActionEvent event) {
System.out.println("BUTTON CLICKED ");
NotesPlayer.onclick=System.nanoTime();
playerObj.play();
}
NotesPlayer Class
`public class NotesPlayer implements Runnable
{
protected Thread t=null;
protected static long onclick;
private static long b4start;
private static long afterstart;
public void run()
{
afterstart=System.nanoTime();
System.out.println("THREAD STARTING duration: "+((double)(afterstart-b4start))/1000000+" Milli sec");
System.out.println("Total time : "+((double)(afterstart-onclick))/1000000 +" milli sec");
}
public void play()
{
if(t==null)
{
t = new Thread (this);
t.setPriority(1);
}
else
{
try {
t.interrupt();
t = new Thread (this);
t.setPriority(1);
} catch (Exception ex) {
Logger.getLogger(NotesPlayer.class.getName()).log(Level.SEVERE, null, ex);
}
}
b4start=System.nanoTime();
t.start();
}}
输出:
BUTTON CLICKED
THREAD STARTING duration: 3.89165 Milli sec
Total time : 4.4235 Milli sec
您可以使用-这样线程(通常)就已经启动了,节省了2毫秒。就线程优先级而言,Linux内核通常不完全支持线程优先级。您可能需要设置THealPrimRyTyPrand标志,使JVM甚至考虑重写优先级值。所以,我不会为这件事烦恼太多it@assylias谢谢你的快速回复。。当我们使用Executorservice时,是否可以中断它的执行。。因为在重新启动时,我正在中断活动线程并创建新线程。@ShanaKalyan是的,您可以中断任务(但基础线程将被重新用于您提交的下一个任务).Re优先级:桌面/服务器/智能手机操作系统设计用于承载多个相互竞争CPU时间等资源的应用程序。操作系统试图给每个线程一个公平的份额。此类平台上的Java线程“优先级”通常不会映射到线程的真正调度优先级,而是映射到调整线程共享大小的调整参数(例如Unix nice值)。我不知道Android,所以我不知道如何设置实时传输音频数据的线程的真正优先级。