- ベストアンサー
JavaのthreadPriorityについて
- threadPriorityについての設定方法とその効果についてご質問です。
- ご質問の内容は、Javaのスレッドの優先順位を設定するthreadPriorityについてです。
- 質問者さんは、設定したthreadPriorityの値が10になっていることについて疑問を持っています。また、処理が重いために効果がないように感じているようです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- Javaのメソッドについて
Javaの参考書を見ていて分からない点があります。 Kadaiクラスで使用したcurrentThreadメソッドは、 Thread.currentThread()と書いてもthis.currentThread()と書いても 実行結果が同じになります。 currentThreadメソッドは静的メソッドなのに、 なぜthis.currentThread()でも良いのか分かりません。 this.currentThread()も静的メソッドなのでしょうか? class SampleThread{ public static void main(String[] args){ Thread t1=new Kadai(); t1.setName("Minimum"); //スレッド名を設定 t1.setPriority(Thread.MIN_PRIORITY); //優先順位を設定 Kadai t2=new Kadai(); t2.setName("Normal"); t2.setPriority(Thread.NORM_PRIORITY); Kadai t3=new Kadai(); t3.setName("Maximum"); t3.setPriority(Thread.MAX_PRIORITY); t1.start(); //プライオリティが最低のスレッドを実行 t2.start(); //プライオリティが普通のスレッドを実行 t3.start(); //プライオリティが最優先のスレッドを実行 } } class Kadai extends Thread{ public void run(){ Thread t=this.currentThread(); //スレッド情報を取得 System.out.println("スレッド名:"+t.getName()+" プライオリティ:"+t.getPriority()); } }
- ベストアンサー
- Java
- javaの割込みのcatchに関する質問
下記のコードはgenInterruptにて、割込みを10回発生させ、rcvInterruptでその 割込みをcatchするものです。 割込みの発生周期が1msの場合は、割込みのcatchは略10回受取ることが出来ますが、 割込みの発生周期が短い場合は、最初の2、3個受取るのみです。 Q1)割込みの発生周期が1msの場合には、全ての割込みをcatchすることが出来ますか? //========================== //Project: Interrupt(受信側セット)の確認 class T_thread extends Thread{ static int TIMES=20; public static void main(String args[]){ rcvInterrupt obj=new rcvInterrupt(); obj.start(); for (int i = 0 ; i <TIMES ; i++){ try{ Thread.sleep(1); //System.out.println("main: "+TIMES+"20回の1msタイマー待ち"); }catch(InterruptedException e){ } } } } class genInterrupt extends T_thread{ private Thread target; genInterrupt(Thread targetx){ this.target=targetx; } public void run(){ System.out.println("genInterupt start"); for (int i=0; i<10; i++){ try{ Thread.sleep(0); //割込みが殆ど捕らえられない //Thread.sleep(1); //割込みが全て捕らえられない事がたまにある target.interrupt(); } catch(InterruptedException e){ } } } } class rcvInterrupt extends T_thread{ int cnt=0; public void run(){ genInterrupt obj=new genInterrupt(Thread.currentThread()); obj.setPriority(Thread.MAX_PRIORITY); obj.start(); System.out.println("receiveInterupt start"); for (int i=0 ; i<20 ; i++){ try{ Thread.sleep(2); }catch(InterruptedException e){ System.out.println("get interrupt cnt="+cnt++); } } } } //========================== 以上、宜しくお願いします。
- ベストアンサー
- Java
- javaのスレッドの割込みについて
javaのスレッド割込みに関する初心者の質問です。 割込みの発生元でCNTに値を設定し、割込みの受信元でCNTの値を読込み、表示しています。 下記のコードを参照ください。 Q1)CNTの値の設定と読込みで競合が発生する様なことはありませんか? 又は、処理が停滞するとか 以上、お手数をお掛けしますが、宜しくお願いします。 //割り込を発生するスレッド class threadA extends base{ private Thread target; public threadA(Thread targetA){ target = targetA; } public void run(){ for(int i = 0; i < 8;i++){ try{ System.out.print("."); Thread.sleep(1); CNT=i; target.interrupt(); }catch(InterruptedException e){ System.out.println("今割り込まれました: thread"); } } } } //スレッドからの割り込みを受信するルーチン class Sample108{ public static void main(String args[]){ //for(int i=0; i<2; i++){ classA obj = new classA(); obj.threadStart();//割り込みを受けるルーチン、この中で、割り込みを発生するルーチンを起動している //} } } //割り込みを受けるルーチン class classA extends base{ void threadStart(){ System.out.println("Start: main****"); threadA obj = new threadA(Thread.currentThread()); obj.start(); //Thread起動 //mainのルーチン for(int j = 0;j < 20; j++){ try{ Thread.sleep(1); System.out.print("*"); }catch(InterruptedException e){ System.out.println("今割り込まれました: classA CNT="+CNT); } } } } 以上
- ベストアンサー
- Java
- javaのループ回数に関連する実行時間について
Windows7 メモリ2GB弱で、下記のSample61.javaのjavaファイルを400回(又は4000回)ループしまして 各ループの『obj.method(j);』を実行する所要実行時間を測定し、最大値、最小値を表示しています。 測定環境は下記の、『S_Sample61 //フォルダー構造』、『aaa.bat //バッチファイル』、 『Sample61.java //javaファイル』をご覧ください。 400回ループの場合の各ループの最大実行時間:約0.34ms 4000回ループの場合の各ループの最大実行時間:約1.6ms Q1)400回ループと4000回ループの場合に於いて、『obj.method(j);』を実行する所要実行時間 最大値の差の原因についてコメントください。 注)もしアルゴリズムに誤りがあれば、ご指摘ください。 S_Sample61 //フォルダー構造 ---class ---jar ---src aaa.bat //バッチファイル cls c:\pleiades44\java\8\bin\javac -encoding UTF-8 -cp ./jar/* -d ./class ./src/*.java rem c:\pleiades44\java\8\bin\java -verbose:gc -cp ./class;./jar/* Sample61 c:\pleiades44\java\8\bin\java -cp ./class;./jar/* Sample61 pause Sample61.java //javaファイル class Sample61{ public static void main(String args[]){ sub obj ; long start=0; int max=0; int min=99999; for(int j=0; j<400; j++){ obj = new sub(); //dataProcess_XXX obj_dataProcess=new dataProcess_XXX(); //obj_dataProcess.setPriority(Thread.MAX_PRIORITY); //効果なし //obj_dataProcess.start(); //obj.setPriority(Thread.MAX_PRIORITY); //obj.start(); start=System.nanoTime(); obj.method(j); long end=System.nanoTime(); long wk=end-start; if(wk<min) min=(int)wk; if(wk>max) max=(int)wk; // System.out.println("cycle_time="+wk); // obj = null; // System.gc(); // try{Thread.sleep(1);}catch(InterruptedException e){} } //for String str; str=String.format("min=%1$,d max=%2$,d max/min=%3$d",min,max,(int)(max/min)); System.out.println(str); // System.out.println("min="+min+" max="+max+" max/min="+(int)(max/min)); } //main } class sub{ void method(int k){ int a,b,c; a=100; b=200; for(int i=0; i<10000; i++){ c=(a+b+k)*i; } // System.out.println("ようこそ!javaの世界へ"); } } 以上、宜しくお願いします。
- ベストアンサー
- Java
- Threadクラスのメソッドの使用方法について
Threadクラスのメソッドの使用方法について質問させていただきます。 Thread th = currentThread(); System.out.println("Thread Name = " + th.getName() ); というコーディングにおいて、Thread th = currentThread();は、 currentThreadメソッドがstaticなのでnewしないで使用しているのは分かるのですが、 th.getName()は、staticでないのに、newせずに使用できるのがなぜか分かりません。 どなたか宜しくご教示お願い致します。
- ベストアンサー
- Java
- [javaプログラムについて] うまく動きません。
import java.*; class Test { void main() { Th th1 = new Th("01スレッド"); Th th2 = new Th("02スレッド"); th1.start(); th2.start(); } } class Th extends Thread { void run(String pri) { for (int i=0;i<5;i++) { System.out.println(pri + " : " + i); } } } スレッドの使い方がいまいちよく分かりません。 どこが間違っているのか教えてください。 宜しくお願い致します。
- ベストアンサー
- Java
- JAVAの初心者です.
import java.io.*; class Sample3 { public static void main(String args[])throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int meny; int max = 0; int kingaku[]; kingaku = new int[5]; char ss[][]; ss = new char[5][80]; do{ String hako = br.readLine(); meny = Integer.parseInt(hako); System.out.println("1:入力とその長さ"); System.out.println("2:データ入力"); System.out.println("3:データ表示"); System.out.println("4:おしまい"); switch(meny){ case 1: System.out.println("文字を入力してください。"); String input = br.readLine(); System.out.println(input + "は" + input.length + "文字です。"); break; case 2: if (max == 0){ System.out.printin("登録をしてからお選びください。"); }else{ System.out.println("名前を入力してください。"); String ss[max] = br.readLine(); System.out.println("金額を入力してください。"); String kingaku[max] = br.readLine(); System.out.println(ss[max] + "さんで" + kingaku[max] + "を登録します。"); max++; } break; case 3: System.out.println("現在登録人数は" + max + "人です。"); for(int aa = 0;aa<max;aa++){ System.out.println(name[max] + kingaku[max]); } break; } }while(meny != 4); } } 上記のソースなのですが、コンパイルで今のところ2つエラーが出てしまうのです。 String ss[max] = br.readLine(); String kingaku[max] = br.readLine(); の所がエラーと表示されます。 javaは入力した文字を表示するだけでしたら = Integer.paruseint()する必要ないですよね?? 初心者ならではの質問でごめんなさい。 ご教授宜しくお願いいたします。
- ベストアンサー
- Java
- Javaのサーブレットについて(マルチスレッド)
サーブレットについて質問です。 サーブレットは1インスタンス・複数スレッドという形態で、 サーブレットコンテナにより管理されていると思います。 では、このコンテナ内では、どのように1インスタンス・複数スレッドを 実現しているのでしょうか? 以下、自分なりに考えたプログラムです。 たぶん、このようにすれば、1インスタンス・複数スレッドになるのかと思うのですが。 どなたかご教授願いますでしょうか。 よろしくお願いいたします。 【1インスタンス・複数スレッドプログラム例】 public class TestThread extends Thread { public void run() { System.out.println("TestThread.run()"); } public static void main(String[] args) { Thread tt = new TestThread(); Thread th1 = new Thread(tt); Thread th2 = new Thread(tt); th1.start(); th2.start(); } }
- 締切済み
- Java
- 交互にスレッド実行 (どうしてちゃんと動いてる?)
http://oshiete1.goo.ne.jp/qa2968378.html で質問した者です。 2つのスレッドで1と2を交互に実行する以下のプログラム。 final Object obj1 = new Object(); //スレッド間通信用のobject final Object obj2 = new Object(); //スレッド間通信用のobject2 Thread t1 = new Thread() { public void run() { try { while(true) { System.out.print("1"); synchronized (obj1) { synchronized (obj2) { obj2.notify();//相手をnotifyして } obj1.wait();//自分はwait } } } catech (Exception e){} }; Thread t2 = new Thread() { public void run() { try { while(true) { System.out.print("2"); synchronized (obj2) { synchronized (obj1) { obj1.notify(); } obj2.wait(); } } } catch (Exception e){} } }; Thread t1 = new Test1(); Thread t2 = new Test2(); t1.start(); while(t1.getState() != Thread.State.WAITING); t2.start(); が思ったように動いてはいるものの、なぜ正常に動いているかがわかりません。 t1が wait() したときはobj1のロックをもっていて、t2の synchronized (obj1){obj1.notify()} ブロックに入れず待機するはずだと思うのですが。 なぜちゃんと動いているのでしょう?
- ベストアンサー
- Java
- スレッド1とスレッド2を交互に実行するには?
スレッド1→スレッド2→スレッド1・・・と同期を取り合いながら交互にスレッドを動かしたいのですが、Thread.getState()を用いないで実現するよい方法はないでしょうか? どうしてもデッドロックが発生しうる方法しか思いつかず困っています。 例えば以下のプログラムで1212と交互に表示させたい場合です。 以下のプログラムは当然デッドロックになりますが、やりたいことを伝えるために載せておきます。 Object obj; //スレッド間通信用のobject class Test1 extends Thread { public void run() { while(true) { System.out.print("1"); synchronized (obj) { obj.notify();//相手をnotifyして obj.wait();//自分はwait } } } } class Test2 extends Thread { public void run() { while(true) { System.out.print("2"); synchronized (obj) { obj.notify(); obj.wait(); } } } } new Test1().start(); new Test2().start();
- ベストアンサー
- Java