Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何减少线程';s start()方法在java中的执行时间_Java_Android_Multithreading_Midi_Javax.sound.midi - Fatal编程技术网

如何减少线程';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,所以我不知道如何设置实时传输音频数据的线程的真正优先级。