割込みのcatchに関する質問

このQ&Aのポイント
  • 割込みの発生周期が1msの場合には、全ての割込みをcatchすることが出来ますか?
  • 下記のコードは、割込みを10回発生させ、割込みをcatchするものです。
  • 割込みの発生周期によって、割込みを受け取る回数が異なることがあります。
回答を見る
  • ベストアンサー

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
  • 回答数4
  • ありがとう数9

質問者が選んだベストアンサー

  • ベストアンサー
  • OKTaro-
  • ベストアンサー率50% (36/72)
回答No.1

このコードでは実行時の状況に左右されますので、発生周期いくつにしたら10回インタラプトされるという事は保証できません。 とはいっても最近のPCの性能ではそこまでブレはでませんが… ただ、上記のコードでは保証はされない、という事です。 絶対に大丈夫という保証をつけるのであればsynchronizedなどを用いて、キチンと同期処理を実装して意図した順番でコードが動作するようにする必要があります。

bakabon_X
質問者

お礼

OKTaro-さま 毎度、お世話になります。 貴方に教えて頂きましたコードに、Timerにより1ms毎に割込みを発生するルーチンをgenInterruptに実装しまし、このタイマー動作に同期しましてgenInterruptが割込みを 発生し、rcvInterrptがその割込みを受信する様に考えました。 下記のコードをご覧ください。 タイマーの割込み動作が遅く1msではなく、100ms毎に割込みを発生する様なかんじです。 この件に、関しまして、コメント頂けますと大変助かります。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; class T_thread { public static void main(String args[]) { new rcvInterrupt().start(); } } class genInterrupt extends Thread implements ActionListener{ static int CNT=2048; static int INDEX=0; static Timer timer; int H[]=new int[1024]; int ptrR=0; int ptrW=0; private rcvInterrupt target; genInterrupt(rcvInterrupt targetx) { this.target = targetx; timer = new Timer(1 , this); timer.start(); } public void actionPerformed(ActionEvent e){ if(ptrW<1000000) { H[ptrW++]=ptrW; ptrW&=1023; H[ptrW++]=ptrW; ptrW&=1023; System.out.println("================actionPerformed ptrW="+ptrW); } } public void run() { System.out.println("genInterupt start"); // for (int i = 0; i <CNT; i++) { while(CNT>0){ if(ptrW>ptrR){ //========================= //受信側が、wait()状態になった事を確認して、notifyAll()を実行する while (!target.isWaited) { //isWaitedがtrueになるのを待つ // rcvInterruptがsynchronizedブロックに入るまで待ち合わせ // これがないと連続してsynchronizedしてしまう可能性がある } synchronized (target) { target.notifyAll(); //notifyAllにより、wait()を抜け出る target.isWaited = false; // // System.out.println("===notify in genInterrupt"); } //synchronized (target) { //========================= ptrR++; ptrR&=1023; CNT--; INDEX++; } else if(ptrR>ptrW){ while (!target.isWaited) { //isWaitedがtrueになるのを待つ } synchronized (target) { target.notifyAll(); //notifyAllにより、wait()を抜け出る target.isWaited = false; // // System.out.println("===notify in genInterrupt"); } //synchronized (target) { ptrR++; ptrR&=1023; CNT--; INDEX++; } // } //for } } // public void run() { } //class genInterrupt extends Thread { class rcvInterrupt extends Thread { int CNTX=2048; volatile boolean isWaited; //========================= public synchronized void run() { new genInterrupt(this).start(); System.out.println("=============new genInterrupt(this).start()"); for (int i = 0; i <CNTX; i++) { try { isWaited = true; wait(); //notifyAllにより、rcvInterruptのwait()を抜け出る //isWaitedはfalseになる System.out.println("get interrupt i=" + i+" CNT="+genInterrupt.INDEX); //isWaited = true; } catch (InterruptedException e1) { } } //for System.out.println("==========End of rcvInterrupt"); genInterrupt.timer.stop(); System.exit(0); //************************** } //public synchronized void run() { //================================= } //class rcvInterrupt extends Thread {

bakabon_X
質問者

補足

明快な回答有難うございます。 >絶対に大丈夫という保証をつけるのであればsynchronizedなどを用いて、キチンと同期処理を実装して意図した順番でコードが動作するようにする必要があります。 <--もし、出来ればsynchronizedをどの様に使用すれば良いのでしょうか?

その他の回答 (3)

  • OKTaro-
  • ベストアンサー率50% (36/72)
回答No.4

>Q2)下記の2つのコードで、rcvInterruptにthisをてけるとstaticに付きエラーになりますが、 についてですが、まず2つのエラーになりえる要因があります。 mainメソッド内で new rcvInterrupt().start(); をコールしていると思いますが、これはご推察の通り、staticメソッド内ですので、this参照が出来ずにエラーになります。これが1つ 仮にthisの参照(T_threadクラスのインスタンス)が渡せたとしても new rcvInterrupt(this).start(); というコードはエラーになります。これが2つ目 これが >new genInterrupt(this).start()にthisが必要な訳は何でしょうか? というところに関わってきます。 new クラス名 のコードで呼び出されるのはnewしようとしているクラスのコンストラクタがコールされます。 rcvInterruptクラスにはコンストラクタが宣言されていないのですが、一つもコンストラクタがない場合は引数がないコンストラクタがあるものと等価になります。 public rcvInterrupt() { } というものがあるものとして動くという理解で問題ありません。 new rcvInterrupt();では上記のコンストラクタをコールしますので、何か引数を渡した場合、エラーになるのです。 一方genInterruptクラスでは genInterrupt(rcvInterrupt targetx) { this.target = targetx; } というコンストラクタが宣言されていますので、rcvInterruptクラスのインスタンスを渡さないとエラーになるのです。 冗長な記述ですが、以下のように書き換えると繋がりがわかりやすいかもしれません。 rcvInterrupt Interrupt = this; new genInterrupt(Interrupt).start(); 簡潔に言いますと 「genInterruptクラスのコンストラクタの引数にrcvInterruptのインスタンスが必要だから」 が答えになります

bakabon_X
質問者

お礼

OKTaro- さま 毎度、お世話になります。 もし、出来れば、貴方に教えて頂きました最初のコードに下記の機能の追加が出来ないでしょうか? 1)1Kワード(型int)のリングバッファーを設けまして、1msに2ワードの割合でバッファーに 書き込みを行ないます。  0x1、0x2,0x3,......0x1024,0x1025,0x1024...... 0番地          最後    0番地 2)バッファーに未送信のデーターがあり、受信側が受信可能ならば、送信を行ないます。 お手数ですが、もし出来れば、お願いします。 貴方に教えて頂きました、notifyAllを使用するコードは私にとりましては、新しい方式であり 本当に参考になりました。 以上

bakabon_X
質問者

補足

OKTaro- さま 明確、親切な回答有難うございます。

  • OKTaro-
  • ベストアンサー率50% (36/72)
回答No.3

>Q1) クラスT_threadの中に、 CNTと CNTXを下記の如く追加しまして、rcvInterruptとgenInterruptの繰返しに反映させるためには、どの様に変更すれば宜しいでしょうか? 一般的には定数と呼ばれる宣言時に値を固定したものを使用します。 今回は他のクラスから参照する定数になるので、可視性をpublicにしたものを宣言します。 public : 可視性を全ての範囲にする static : 静的アクセス。インスタンスを必要としない final : 一度しか初期化出来なくする class T_thread { public static final int CNT = 2000; public static final int CNTX = CNT; // 以下略 } という定数を用意しまして 使用するクラスからは for (int i = 0; i < T_thread.CNT; i++) for (int i = 0; i < T_thread.CNTX; i++) のように参照します。 static修飾子が付いているので、「クラス名.変数名」という形でアクセス出来ます。 元の質問のソースのTIMESという変数でもT_thread.TIMESと書けば参照できるはずです。 ※通常大文字とアンダースコアだけで構成された変数名は定数として扱うのが普通なので、static final をつけるのが良いと思います。その他、いろいろ命名規則がありますので、その辺も見ておくと他の人とコードをやりとりする際にスムーズになると思います。

bakabon_X
質問者

お礼

OKTaro- さま 毎度、お世話になります。 先に質問しました、thisの件は、多少わかりました。 即ち、割込み信号の受信先を、送信元のgenInterruptに知らせるためと思います。 ======================== genInterrupt(rcvInterrupt targetx) { this.target = targetx; } ======================== notiyAll()について、これから勉強します。 以上

bakabon_X
質問者

補足

OKTaro- さま 初歩的な質問の回答有難うございます。 貴方の回答を、よく読み理解いたします。 ついでに、もし出来れば、もう一つ教えて頂けないでしょうか? Q2)下記の2つのコードで、rcvInterruptにthisをてけるとstaticに付きエラーになりますが、 new genInterrupt(this).start()にthisが必要な訳は何でしょうか?  ====================  new rcvInterrupt().start();  new genInterrupt(this).start(); ===================== 注)貴方のプログラムの割込みの送信とその受信の部分に関しましては、 これから勉強させて頂きます。 今までの、不安が解消しまして、所謂目から鱗が落ちた感です。 以上

  • OKTaro-
  • ベストアンサー率50% (36/72)
回答No.2

synchronizedを使ってマルチスレッド処理の順番制を保証する場合はThread.sleepではなく、Object.waitとObject.notify(またはnotifyAll)を使用するのが良いと思います。 というのもwaitとnotifyは「待ち合わせ」を行う事ができますが、Thread.sleepでは「一方的に一時停止」するだけだからです。 waitとnotifyを使うとすると以下のようなコードであれば確実に順番を保証できます。 class T_thread { public static void main(String args[]) { new rcvInterrupt().start(); } } class genInterrupt extends Thread { private rcvInterrupt target; genInterrupt(rcvInterrupt targetx) { this.target = targetx; } public void run() { System.out.println("genInterupt start"); for (int i = 0; i < 10; i++) { while (!target.isWaited) { // rcvInterruptがsynchronizedブロックに入るまで待ち合わせ // これがないと連続してsynchronizedしてしまう可能性がある } synchronized (target) { target.notifyAll(); target.isWaited = false; System.out.println("notify"); } } } } class rcvInterrupt extends Thread { volatile boolean isWaited; public synchronized void run() { new genInterrupt(this).start(); for (int i = 0; i < 10; i++) { try { isWaited = true; wait(); System.out.println("get interrupt cnt=" + i); } catch (InterruptedException e1) { } } } } ※補足 メソッドにsynchronizedをつけた場合はsynchronized(this)でメソッド全体の処理を括った時と動き的には等価です(バイトコードは異なり、メソッド宣言につけた方が軽量です) なお、staticメソッドの宣言につけて場合はsynchronized(クラス.class)と等価です。 synchronizedブロックにはひとつのスレッドしか入ることが出来ないというルールを利用したコードになります。synchronizedブロック内でwaitをコールするとスレッドを停止させた状態でsynchronizedの進入する権利を開放します。それによってもう片方のスレッドがsynchronizedブロックに入り、notifyAllをコールし、waitしているスレッドを起こします。 notifyAllをコールしたあとsynchronizedブロックを抜ける事により、waitから起こされたスレッドが再び起動します。以上! ※オマケ Thread.sleepを使うとすると、軽く考えた感じでは一時停止の用途に合わない処理を実現しようとしているので、多分めんどくさいことになります。 Thread.sleepでないと意味がないんだ!という場合は…考えてみます

bakabon_X
質問者

お礼

OKTaro-様 早速の、素晴らしい回答有難うございます。 10回の繰返しの所を2000に変更しましてRunしました所、約2秒で終了しました。 (注、私のsyncronizedを使用したプログラムは、約20秒以上の実行時間が掛かりました) 貴方のプログラムの、内容は未だ私には不明ですので、これから勉強します。 手元にある本は、わかりやすいjavaオブジェクト指向(川場隆著)であり、ITの 記事も読んでいますが、未だ初心者です。 最初の基本的な質問(これはthread以前の質問です) Q1) クラスT_threadの中に、 CNTと CNTXを下記の如く追加しまして、rcvInterruptとgenInterruptの繰返しに反映させるためには、どの様に変更すれば宜しいでしょうか? 現在は、クラスrcvInterruptとgenInterruptの中に、個別に記載しています。 class T_thread {   int CNT=2000; int CNTX=CNT; public static void main(String args[]) { new rcvInterrupt().start(); } } この変更後、ソースを弄り、勉強の予定です。 以上

bakabon_X
質問者

補足

OKTaro-様 先ほど、お礼コメントで、最初の基本的な質問(これはthread以前の質問です)を しましたが、下記の如くT_thread を変更し、genInterruptクラスとrcvInterruptクラスをstatic に変更しました所、旨く行きました。 御免なさい、初歩的な質問をしまして。 ================== class T_thread { static int CNT=20000; static int CNTX=CNT; public static void main(String args[]) { //rcvInterrupt obj=new rcvInterrupt(); //obj.start(); new rcvInterrupt().start(); } //} //この括弧をコードの最後に移動 //=====================

関連するQ&A

  • 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 選択肢に制限時間を設ける

    こんにちは. 現在javaでプログラムを組んでいるのですが,その中で選択肢を表示させる部分があります. この選択肢の選択に制限時間を設けたいのですが,うまくいきません. このプログラムの実現のためにどんな方法があるでしょうか? どなたかご教授お願いします. なお, public class time extends Thread { public void run() { for (int i = 3; i >= 0 ; i--) { try { sleep(1000); } catch (InterruptedException e) {} System.out.println(i); } } public static void main(String[] args) { time t = new time(); t.start(); try { System.out.println("スレッド t の終了を待機します。"); t.join(); // カウントダウンが終了するのを待つ System.out.println("スレッド t が終了しました。"); } catch (InterruptedException e) {} } } こちらのソースを参考にプログラムを書いてみましたがだめでした.

    • ベストアンサー
    • Java
  • java Threadのsleepを途中で止める方

    今、訓練校に通っていて課題をだされていますが、どうもうまく行きませんのでお知恵を拝借したく思います。  java Threadのsleepを使用し、クイズの回答を10秒以内で答えるというものですが、 途中で入力をすると、次の問題の回答時間が異様に早くなり1秒ではなくなってしまいます。  こういう場合、入力をすれば、runメソッドが終わるというプログラムはどうやって書けばいいのか教えて頂きたく思います。 どうぞよろしくお願いいたします。 <下記、threadの部分だけですが、パッケージを使用するという課題のため無理やり使っています。> package pa; public class CountTest extends Thread { public void start() { super.start(); } public void run() { for (int i=10; i >= 1; i--) { try{ sleep(1000); System.out.print("⇒" ); }catch(InterruptedException e){} } System.out.println(""); for (int i=1; i >= 1; i--) { / } System.out.println("Time up "); System.out.println(""); System.out.println("1-4で答えを記入してください"); }

    • ベストアンサー
    • Java
  • スレッド間の送受信のコードについて

    下記のコードは、(以前お教え頂きました)『synchronized』を使用した、スレッド間の 送受信のコードですが、その代わりに、Interruptとか、Thread.sleep()を使用した、 コードに変更してみたいと思います。 Q1)そのコードをお教え頂けないでしょうか? class T_thread { public static void main(String args[]) { new rcvInterrupt().start(); } } class genInterrupt extends Thread { private rcvInterrupt target; genInterrupt(rcvInterrupt targetx) { this.target = targetx; } public void run() { System.out.println("genInterupt start"); for (int i = 0; i < 10; i++) { while (!target.isWaited) { // rcvInterruptがsynchronizedブロックに入るまで待ち合わせ // これがないと連続してsynchronizedしてしまう可能性がある } synchronized (target) { target.notifyAll(); target.isWaited = false; System.out.println("notify"); } } } } class rcvInterrupt extends Thread { volatile boolean isWaited; public synchronized void run() { new genInterrupt(this).start(); for (int i = 0; i < 10; i++) { try { isWaited = true; wait(); System.out.println("get interrupt cnt=" + i); } catch (InterruptedException e1) { } } } } 以上

    • ベストアンサー
    • Java
  • extendsの使い方

    public class ThreadSample3 { public static void main(String[] args) { ThreadA ta = new ThreadA(); ThreadB tb = new ThreadB(); ta.start(); tb.start(); } } class ThreadA extends Thread { public void run() { try { for(int i = 0; i < 10; i++) { Thread.sleep(1000); System.out.println("ThreadA"); } } catch (InterruptedException e) { } } } class ThreadB extends Thread { public void run() { try { for(int i = 0; i < 10; i++) { Thread.sleep(2000); System.out.println("ThreadB"); } } catch (InterruptedException e) { } } } これは、ThreadAとThreadBを10回ずつ表示させるプログラムなのですが、extendsは子供と親の関係に当たり、例えば親クラスボールだったら子クラスが野球ボールやゴルフボールになると習いました。 class ThreadA extends Thread{ の部分はThreadとThreadAが親子関係になっていますか? またどうして子クラスの名前と親クラスの名前はこう書かないといけないですか。 

    • ベストアンサー
    • Java
  • Threadに関するの質問

    このプログラムに synchronized , wait(), notify()を加えることで、 stackBody[]配列をオーバーやアンダーフローしないようにできるのでしょうか。お助け下さい! public class test { public static void main(String args[]) { Stack stack = new Stack(5); Pusher pusher = new Pusher(stack); Popper popper = new Popper(stack); pusher.start(); popper.start(); } } class Stack { private int stackSize; private int stackPointer; private int stackBody[]; public Stack(){ this(10); } public Stack(int size){ stackSize = size; stackBody = new int[size]; stackPointer = 0; } public void push(int value){ if(stackSize == stackPointer){ // } stackBody[stackPointer++] = value; } public int pop(){ if(stackPointer == 0){ // } return stackBody[--stackPointer]; } } class Pusher extends Thread { Stack s; public Pusher(Stack s) { this.s = s; } public void run() { int n, interval; for(int i = 0; i < 10; i ++) { n = (int)(100.0 * Math.random()); interval = (int)(100.0 * Math.random()); s.push(n); System.out.println("Pusher:" + n); try{ Thread.sleep(interval); }catch(InterruptedException e) {} } System.out.println("Push 終了"); } } class Popper extends Thread { Stack s; public Popper(Stack s) { this.s = s; } public void run(){ int n, interval; for(int i = 0; i < 10; i++){ interval = (int)(100.0 * Math.random()); n = s.pop(); System.out.println("Popper:" + n); try{ Thread.sleep(interval); }catch(InterruptedException e) {} } System.out.println("Popper 終了"); } }

    • ベストアンサー
    • Java
  • javaのmainの中のループに割込を掛ける

    毎度、お世話になります。 javaのmainの中のループに割込を掛ける方法をお教えください。 添付コードの『Thread.currentThread().interrup()』は、旨く機能しません。 以上、宜しくお願いします。 =========== import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class T_try_loop extends JFrame{ JFrame frame=new JFrame(); T_try_loop(){ System.out.println("aaaa"); JPanel p1=new JPanel(); JButton button1=new JButton("button1"); button1.addActionListener(new TimButton1()); p1.add(button1); getContentPane().add(p1, BorderLayout.CENTER); } public static void main(String args[]){ T_try_loop frame=new T_try_loop(); frame.setTitle("TTTT"); frame.setBounds(10,10,400,300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); for(int j = 0;j < 80; j++){ try{ Thread.sleep(80); System.out.print("*"); } catch(InterruptedException e){ System.out.println(": main_loopに、今割り込まれました"); } } }//public static void main public class TimButton1 implements ActionListener{ @Override public void actionPerformed(ActionEvent ae){ String cmd =ae.getActionCommand(); if(cmd.equals("button1")){ Thread.currentThread().interrupt(); System.out.println("Button clicked"); } } }//public class TimButton1 }

    • ベストアンサー
    • Java
  • Javaアプレットについてですが

    Javaアプレットでボタンを押したら数字が増えるものを作っているのですがどうもうまく動きません。 ソースは下の通りです。 変更しなければいけないところがあるならお願いします。 import java.applet.Applet; import java.awt.Graphics; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample7 extends Applet implements Runnable, ActionListener { Button bt; int num; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); Thread th; th = new Thread(this); th.start(); } public void actionPerformed(ActionEvent ae) { public void run() { try{ for(int i=0; i<11; i++){ num = i; repaint(); Thread.sleep(1000); } } catch(InterruptedException e){} } } public void paint(Graphics g) { String str = num + "です。"; g.drawString(str, 50, 50); } }

    • ベストアンサー
    • Java
  • Javaの例外(tryとcatch)について

    Java初心者の大学生です。授業で、 「以下のプログラミングに書き足しをして、例外が3度繰り返されたら プログラムを終了するようにせよ。」 という課題が出ました。 以下のプログラムは… package kadai; import java.io.*; public class kadai { public static void main(String[] args)throws IOException { String ss; int idt,i; BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in)); for(;;){ System.out.print("整数入力: " ); ss= kbd.readLine(); try{ idt= Integer.parseInt(ss);        System.out.println("数値= " + idt); } catch(NumberFormatException e){    System.out.println("入力誤りです" ); continue; } break; } } } というものです。(見づらくて申し訳ありません!) 私はcatchの部分をfor文で3度繰り返しさせて、終了できるようにしようと思い、変数iを定義して、 for(i=0;i<3;i++){ catch(NumberFormatException e){ System.out.println("入力誤りです" ); } } という文を打ち込みました。しかし、エラーばかり出てきてしまい、 一向に解決できません。どこにどうやってfor文を打ち込めば解決 できるでしょうか?また、何故私が考えた文ではエラーが出てしまう のでしょうか? 基礎的な質問で申し訳ありませんが、ご指導をお願い致します。 もし参考になりそうなHP等がありましたら、そちらも教えて いただきたいです。

    • ベストアンサー
    • Java
  • Javaスレッドの割り込みについて

    Javaのスレッド割り込み制御についてご質問です。 スレッドの割り込みの際に用いるメソッドinterrupt()は、 通常、対象のスレッドがsleep()やwait()状態の最中でアクセス不能な場合に使用しますが、 対象のスレッドが、sleep()やwait()以外の状態で、正常に動作している場合に interrupt()を実行した場合、どのような動きをするのでしょうか? 特に問題などありますでしょうか? お手数ですが、どなたかご教授願います。

専門家に質問してみよう