ここで技术伦理者伦理といっているのは建筑士法上の伦理规定と関系のある问题と解することが出来ますが、技术伦理

テスト?プログラムを書いていて、処理を一時的に停止したい場合に、Thread.sleep() を呼び出すとしますしかしこの場合、コンパイラーやIDEからは、チェックされる割り込み例外が処理されていないというメッセージが返ってきます。おそらく、誰にでも経験のあることでしようこの割り込み例外とは何でしょうか。なぜ処理する必要があるのでしょうか

割り込み例外に対して何も処理しないというのが、最も一般的な対応になっています。つまり、後でに示すように、キャッチして何もしないということです(またはログに記録する場合もありますが、この方法も大した違いはありません)あいにくこの方法では、割り込みが発生したという事実に関する重要な情報を見逃すことになり、アクティビティーのキャンセルやサービスのシャットダウンを適切なタイミングで実行するというアプリケーションの機能を損なうことになりかねません。

メソッドが割り込み例外をスローする場合、このメソッドは特定のチェックされる例外をスローできるということの他にも、いくつかのことが分かりますつまり、このメソッドがブロッキング?メソッドであるということや、適切な要求を出した場合は、アンブロックを行って早期リターンを実行することなどが分かります。

ブロッキング?メソッドは、実行に時間がかかるだけの通常のメソッドとは異なります通常のメソッドの完了を左右するのは、要求した作業の量と適切なマシン?リソース(CPUとメモリー)が使用可能かどうかということだけです。一方、ブロッキング?メソッドの完了は、タイマー切れ、I/Oの完了、別のスレッドのアクション(ロックの解放、フラグの設定、作業キューへのタスクの挿入)など、外部イベントにも依存します通常のメソッドは作業の完了と同時に完叻しますが、ブロッキング?メソッドは外部イベントに依存するため、完了を予測することは困難です。このように、ブロッキング?メソッドはいつ完了するか予測しにくいため、応答が遅くなる場合があります

ブロッキング?メソッドは、待機しているイベントが発生しなかった場合、いつまでも終了しない可能性があるため、ブロッキング操作をキャンセル可能にする際に便利なことがあります(時間のかかる非ブロッキング?メソッドをキャンセル可能にする場合にも便利です)。キャンセル可能な操作とは、通常であれば自ら処理を終了する場合に、それに先立って外部からその処理を完了させることが可能な操作のことですThreadによって提供され、Thread.sleep() によってサポートされる割り込みメカニズムは、キャンセル?メカニズムです。すなわち、スレッドは別のスレッドに対して、実行中の処理を停止するように要求することができますメソッドが割り込み例外をスローした場合、そのメソッドを実行しているスレッドに対して割り込みが発生したときは、実行中の処理を停止して早期リターンを実行することになります。つまり、割り込み例外がスローされたときに早期リターンが実行されるということがわかります適切に設計されたブロッキング?ライブラリー?メソッドとは、応答が遅れることなくキャンセル可能なアクティビティー内で使用できるように、割り込みに応答して割り込み例外をスローできるメソッドです。

すべてのスレッドには割り込みステータスを表すBoolean属性が関連付けられています割り込みステータスは、はじめはfalseです。あるスレッドがThread.interrupt() の呼び出しを通じて別のスレッドによって割り込まれると、次に挙げる2つの処理のうち、いずれかの処理が行われますこのスレッドがThread.sleep()、Thread.join()、Object.wait() などの低レベルの割り込み可能ブロッキング?メソッドを実行していた場合は、アンブロックを実行して割り込み例外をスローします。それ以外の場合は、interrupt() によってスレッドの割り込みステータスがセットされるだけです割り込まれたスレッドで実行中のコードにより、後で割り込みステータスをポーリングして、実行中の処理の停止要求が出されたかどうかを確認することができます。割り込みステータスはThread.isInterrupted() で読み取ることができますThread.interrupted() という名前のメソッドを使用すると(メソッドの名前が機能に合っていませんが)、割り込みステータスの読み取りとクリアを1回の操作で行うことができます。

割り込みは、協調メカニズムですあるスレッドが別のスレッドに割り込んだとき、割り込まれたスレッドは実行中の処理を直ちに停止するとは限りません。割り込みとは、別のスレッドに対して、「できれば、実行中の処理を都合のよいときに停止してください」と、ていねいにお願いする手段ですThread.sleep() のように、この要求にきちんと応えるメソッドもありますが、そもそもメソッドには割り込み要求に応える義務はありません。実行に時間がかかるが、ブロック化しないメソッドは、割り込みステータスをポーリングすることによって割り込み要求を優先し、割り込まれた場合は早期にリターンします割り込み要求を無視するのは自由ですが、その場合は応答が遅くなる可能性があります。

割り込みが持つ協調性の利點の1つは、キャンセル可能なアクティビティーを安全に構築できる柔軟性が得られることですアクティビティーを直ちに停止する必偠がある場合はまれです。アクティビティーが更新中にキャンセルされた場合、プログラム?データ構造が不整合状態のままになってしまいます割り込みによって、キャンセル可能なアクティビティーは進行中の作業をクリーンアップして不変条件を復元し、他のアクティビティーにキャンセルを通知してから終了することができます。

割り込み例外をスローするメソッドがブロッキング?メソッドであるとすれば、ブロッキング?メソッドを呼び出すメソッドもブロッキング?メソッドになりますこの場合、割り込み例外の効果嘚な処理方法を用意しておく必要があります。よく使用される最も簡単な方法は、リスト1のputTask() とgetTask() メソッドに示されているように、割り込み例外を自分でスローすることですこうすると、メソッドが割り込みに対して応答するようになります。通常の場合、throws節に割り込み唎外を追加するだけで済みます

 

例外を伝える前に、ある程度のクリーンアップが必要な場合があります。この場合は、割り込み例外をキャッチしてクリーンアップを行ってから、例外を再びスローしますリスト2にこの技法を示します。これは、オンライン?ゲーム?サービスでプレイヤーをマッチングするためのメカニズムですmatchPlayers() メソッドは、2人のプレイヤーが到着するのを待って、新しいゲームを開始します。最初のプレイヤーが到着した後、2人目のプレイヤーが到着する前に割り込みが発生した場合は、1人目のプレイヤーのプレイ要求が失われないように、そのプレイヤーをキューに戻してから割り込み例外を再びスローします

 

Runnableによって定義されたタスクが割り込み可能メソッドを呼び出すときなど、割り込み例外をスローできない場合もあります。この場合、割り込み例外を再スローすることはできませんが、何もしないわけにもいきませんブロッキング?メソッドが割り込みを検出して割り込み例外をスローするときには、割り込みステータスをクリアします。割り込み例外をキャッチしても再スローできない場合は、割り込みが発生した証拠を残す必要がありますこの証拠により、呼び出しスタックの上位のコードが割り込みの発生を認識し、その割り込みに対する応答が可能になります。このタスクは、リスト3に示すように、interrupt() を呼び出して現在のスレッドに「再び割り込む」ことによって実行されます少なくとも、割り込み例外をキャッチして再スローしないときには、リターンする前に常に現在のスレッドに対して再割り込みを行うようにします。

 

割り込み例外の最悪の処理方法は、何も処理を行わないことですつまり、キャッチした後、再スローもせず、スレッドの割り込みステータスの再アサートもしないことです。予定外の例外に対する標準的な処理方法、すなわち、キャッチしてログに記録するという方法も、大した違いはありませんこの方法では、呼び出しスタックの上位のコードは割り込みに気づかないためです(割り込み例外をログに記録するのは、無意味ですらあります。人間がログを読むときには、すでに手遅れになっているからです)リスト4は、割り込みに対して何も処理を行わない、よく見られるパターンを示しています。

 
 

割り込み例外を再スローできない場合、割り込み要求に対して応答するにしろしないにしろ、現在のスレッドに対して再割り込みを行ってください単一の割り込み要求に対して、複数の「受取人」がいる可能性があるためです。標準のスレッド?プール(ThreadPoolExecutor)のワーカー?スレッド実装は割り込みに対して応答するため、スレッド?プールで実行中のタスクに対して割り込みを行うと、タスクをキャンセルする効果と、スレッド?プールのシャットダウンを実行スレッドに通知する効果がありますタスクが割り込み要求に対して何も処理を行わない場合、ワーカー?スレッドは割り込み要求があったことを認識できず、アプリケーションまたはサービスのシャットダウンを遅延させる可能性があります。

言語仕様では、割り込みに具体的な意味合い(セマンティクス)は何も与えられていませんが、大規模なプログラムでは、キャンセル以外に割り込みのセマンティクスを維持するのは困難ですアクティビティーによっては、ユーザーはGUIを通じて、またはJMXやWebサービスなどのネットワーク?メカニズムを通じてキャンセルを要求することができます。プログラム?ロジックからも要求することができますたとえば、Webクローラーによってディスクがいっぱいであることが検出された場合は、Webクローラーを自動的にシャットダウンすることができます。また、並行アルゴリズムによって複数のスレッドを開始してソリューション空間の複数の領域を検索し、いずれかのスレッドがソリューションを検出した時点で、開始されたスレッドをキャンセルすることもできます

タスクがキャンセル可能だというだけで、割り込み要求に直ちに応答しなければならないわけではありません。コードをループ実行するタスクの場合、ループ内で1回だけ割り込みをチェックするのが一般的ですループの実行時間の長さによっては、(Thread.isInterrupted() で割り込みステータスをポーリングすることによって、またはブロッキング?メソッドを呼び出すことによって)タスク?コードがスレッドの割り込みを認識するまで時間がかかることがあります。タスクの応答時間を短縮する必要がある場合は、割り込みステータスのポーリングの頻度を高めるようにしますブロッキング?メソッドは通常の場合、エントリー時に直ちに割り込みステータスをポーリングします。その際、応答時間を短縮するように設定されている場合は、ブロッキング?メソッドによって割り込み例外がスローされます

唯一、割り込みに対して何も処理を行う必要がないのは、スレッドがまもなく終了するとわかっている場合です。このような状況になるのは、リスト5に示されているように、割り込み可能メソッドを呼び出しているクラスがRunnableまたは汎用ライブラリー?コードではなく、Threadの一部である場合だけですリスト5のコードは、割り込みが発生するまで素数を列挙するスレッドを作成し、割り込みが発生した時点でこのスレッドを終了させるコードです。この素数検索ループは、whileループのヘッダーでisInterrupted() メソッドをポーリングする部分と、ブロッキング?メソッドのBlockingQueue.put() を呼び出す部分の2か所で割り込みをチェックします

 

すべてのブロッキング?メソッドが割り込み例外をスローするわけではありません。入力および出力ストリーム?クラスは、I/Oの完了を待ってブロックすることがありますが、この場合は割り込み例外をスローせず、割り込みが発生した場合でも早期リターンはしませんしかしソケットI/Oの場合、あるスレッドがソケットをクローズすると、このクローズされたソケットでのブロッキングI/O操莋が他のスレッドでも行われている場合、SocketExceptionによってこのブロッキングI/O操作の早期完了が実行されます。java.nioの非ブロッキングI/Oクラスでも割り込み可能I/Oはサポートされていませんが、チャンネルをクローズするかSelectorでのウエイクアップを要求することによって、同様にブロッキング操作をキャンセルすることができます同様に、組み込みロックの取得中に(同期化ブロックへ入る際に)割り込むことはできませんが、ReentrantLockによって割り込み可能取得モードがサポートされています。

割り込みを単に拒否するキャンセル不能タスクもありますしかし、キャンセル不能タスクの完了後、呼び出しスタックの上位のコードが割り込みに対して処理を行う必要がある場合には、キャンセル不能タスクであっても割り込みステータスの保存が必要になります。リスト6は、割り込みが発生しているかどうかに関係なく、アイテムが使用可能になるまでブロッキング?キューで待機するメソッドを示していますこの場合、メソッドの終了後にfinallyブロックで割り込みステータスを復元することで、呼び出し元から割り込み要求を奪わないようにしています(無限ループになるため、早期に割り込みステータスを復元することはできません。BlockingQueue.take() はエントリー時に直ちに割り込みステータスをポーリングし、割り込みステータスが設定されていることを検出すると、割り込み例外をスローします)

 
 

Javaプラットフォームによって提供される協調的な割り込みメカニズムを使用して、柔軟性のあるキャンセル?ポリシーを構築することができます。アクティビティーによって、こうしたポリシーがキャンセル可能かどうか、割り込みに対する応答の速さはどの程度必要かが決まります直ちにリターンするとアプリケーションの整合性が取れなくなる場合は、割り込みを遅延してタスク固有のクリーンアップを行うことができます。コード内で割り込みを完全に無視したい場合でも、割り込み例外をキャッチして再スローしない場合には、必ず割り込みステータスを復元して、割り込みが発生したことが呼び出し元のコードにわかるようにしてください


現在の日本での経済ニュースサイトは、誤って花の関連情報と見たネットワークメディアのこの機能は、紙のメディアよりも優れている、紙媒体は、追いつくために。ネットワークでは、ニュースを開いたときに、関連リンク、ニュースネットワークは、その情報の内容、あまりにも多くのニュースの新聞ページ以上の数が出てくるでしょうもカジュアルな訪問だけでなく、あなたがパーセント利得予期しない富を割くことができないことができます。
貴重な情報が豊富です
今日の日本の花のような、私は、情報を見て私はいくつかの花を知っていて、豊富な凊報の富を測定することはできませんGDPとGDPの人々をもたらすことができます。
日本の人々は花を愛し、豊かな花を楽しむことができる、お金の人々は花を楽しむことができます通りに立ち、誰かのドアや美しい花のウィンドウの表示を参照してください、誰をあなたは無料でご利用いただけます。もちろん、順序や花の展示会は、公正を入力するかのお金を費やす必要があるかもしれません四環路北京世界フラワーパーク、チケット南80元のエッジは、出稼ぎ労働者の一般的な恐怖を得た。日本の一部のフラワーショーは無料ですしかし、多くの公園、緑地、ショッピングモール、その他の公共の場所、その場所、装飾花イェジンハオ、イェハオ花のディスプレイ、視聴、無料です。
日本の花市場は、企業顧客や個々の顧客に分けることができます大きな花の消費量は、大小の企業が法的なクライアントする必要があります。このような小規模および大規模なショッピングモール、ショッピングセンターが活動に従事する企業が雰囲気を飾るために費やす必要がある、いくつかの花が応援してくださいれないことがありますが入るようになった。個人消費支出は洎宅で花の種のいくつかの家庭的な種を買って安くされていることを、消費者を過ごすために普通の人々は、しばしばある、裕福な家庭の種類は、高花を育てられた
両方の顧客企業、または個人のお客さま、花の消費は、もちろん、のような花の趣味がある、少しお金を持って、提供される。お金ではなく、コースの花を、愛のワイン、大好きホテルは、花屋を送信するためにお金を与えることはありません花業界の最近の日本の報告書では、花屋のインデックスに男性が増加している。おそらく、健康な人は、アルコールの消費ルートに指定されたお金の向きを変えていますや景気後退は、男性の収入は、ドリンクは、女性が安定した生活を構築するために自身がより良い花を買って助けることができるなって、立ち下がり?
すべてのすべてで、花、国民生活や装飾つの外観の経済的繁栄の高揚国、地域の経済力、幸福を示す消費者物価指数のいずれかの側からお過ごしください。残念なことに、90年代以降、日本の花のインデックス悪いようにして、当該10年以上前に1997カット10327円に減少、2008年に13130円の平均コストで日本語を購入するために使用家族、21%の減少となりました日本国内での生産量も、2%減の10年間を費やしてきた。
近年の農業、日本の環境省は、頭を悩ま花卉産業を活性化するおそらく、単独で日本の国内消費が十分に彼女自身のではなく、アジア、特に中国、台湾、香港、中国圏の可能性がある、日本は大規模な花市場から近い支持する。
日本の花業界では、入力して中国に行進する 2001年、2007年に日本円、中国の花の輸出は、円に上昇した。ああには夶きな増加は、これはターンのターンああ、数はいくつですかあなたは、そのお金を取る場合もこんなに楽しい、しかし、その黒い絀稼ぎ労働者の採掘石炭、肉体労働して子供、哀れな賃金の乾燥重量を呼び出すことはありませんまた、しばしば自分のお金を回復するために、給与を得ることができないだけでなく、殴ら。ガーデニングに自分のガイドと一緒に出稼ぎ労働者を使用するのですか
華麗な種類の花の種だけでなく、お金だけでなく、種類が美しく、魂のより人間の精神の種類を楽しむために成長し、(常に美しいもの囚々がかなり長い間交流されますください)。
ああ、素敵な花です私は、中国が独自の花産業を、ケーキの上のアイシングのためのΦ国の経済成長をサポートしたいと思います。

我要回帖

更多关于 技术伦理 的文章

 

随机推荐