Javaのスレッド(thread)とは、プログラム上で複数の処理を同時に動かす仕組みです。スレッドをJavaで使うためのクラスjava.lang.Threadを指す言葉でもあります。 さて、多くの作業は人が手分けすれば早く終わります。違う作業であっても、それぞれの作業へ人を割り当てれば同時に行えます。当然、一人での作業より効率的です。 それと同じで、プログラムでも処理を複数同時に動かせば、短い時間で効率よく処理できます。その仕組みがスレッドです。スレッドは、今ではごく当たり前に使われているのです。 この記事では、Javaでのスレッドの考え方・使い方の基本から、スレッドを使う上で気を付けたいこと、スレッドに関する話題について、ポイントを絞って初心者向けに説明します。 ※この記事はJava 13時点の言語仕様・APIに基づいています。サンプルはJava 13の環境で動作確認しています。 1.ス
Gradle comes with a set of powerful core systems such as dependency management, task execution, and project configuration. But everything else it can do is supplied by plugins. Plugins encapsulate logic for specific tasks or integrations, such as compiling code, running tests, or deploying artifacts. By applying plugins, users can easily add new features to their build process without having to wr
To prepare your software project for growth, you can organize a Gradle project into multiple subprojects to modularize the software you are building. In this guide, you’ll learn how to structure such a project on the example of a Java application. However, the general concepts apply for any software you are building with Gradle. You can follow the guide step-by-step to create a new project from sc
Gradle User Manual Releases All Releases Release Notes Installing Gradle Upgrading Gradle Within versions 9.x.y To version 9.0.0 Within versions 8.x From version 7.x to 8.0 From version 6.x to 7.0 From version 5.x to 6.0 From version 4.x to 5.0 Migrating to Gradle from Maven from Ant Compatibility Notes Gradle's Feature Lifecycle Gradle Tutorials Getting Started Running Gradle Builds 1. Core Conce
例外が発生するとロックの解放が行われなくなり、デッドロックが発生する可能性がある。Java API [API 2006] には以下のように記載されている。 ReentrantLock は、最後にロックに成功したがまだロック解放していないスレッドにより「所有」される。ロックが別のスレッドに所有されていない場合、ロックを呼び出すスレッドが復帰してロックの取得に成功する。 つまり、解放されていないロックを他のスレッドが取得することはできないということである。例外が発生したら、プログラムは所有しているすべてのロックを解放しなければいけない。一方、メソッド同期およびブロック同期で使用されている固有ロックは、スレッドの異常終了のような例外発生時には自動的に解放される。 違反コード (チェック例外) 以下の違反コード例では、ReentrantLock を使用してリソースを保護しているが、ファイルの操作中
Java言語仕様では、64ビットのlong型およびdouble型の値を、2つの32ビット値として扱うことが許されている。たとえば、64ビット値の書込み操作は、2つの独立した32ビット値の操作として実行される可能性がある。 Java言語仕様の17.7節「doubleとlongの非アトミックな扱い」には以下のように記されている。[JLS 2005] ... こうした振る舞いは実装依存である。つまり、Java仮想マシンはlong値やdouble値の書込みをアトミックな動作として実行するか、あるいは、二つの動作として実行するかを自由に決定することが許されている。プログラミング言語Javaメモリモデルでは、volatileでないlong値やdouble値への単一の書込みは、それぞれ32ビットずつの二つの書込みとして扱われる。結果的に、ある64ビット値の書込みの最初の32ビットと、他の書込みによる次の
既知のすべてのサブインタフェース: RunnableFuture<V>, RunnableScheduledFuture<V> 既知のすべての実装クラス: AsyncBoxView.ChildState, ForkJoinWorkerThread, FutureTask, RenderableImageProducer, SwingWorker, Thread, TimerTask 関数型インタフェース: これは関数型インタフェースなので、ラムダ式またはメソッド参照の代入先として使用できます。 @FunctionalInterface public interface Runnable インスタンスを1つのスレッドで実行するすべてのクラスで、Runnableインタフェースを実装する必要があります。このクラスは、引数のないメソッドrunを定義しなければいけません。 このインタフェースは、アク
スレッドの開始方法は誤解しやすい。スレッドで実行したい処理をコード上は正しく実行しているように見えても、実際には間違ったスレッドによって実行してしまっていることがある。Thread.start()メソッドを呼び出すと、Javaの実行環境は新たに開始したスレッドの上で、そのスレッドのrun()メソッドを実行する。Threadオブジェクトのrun()メソッドを直接呼び出すのは間違いである。直接呼び出した場合、run()メソッドのなかに書かれた処理は、新規に生成されたスレッドではなく、呼出し元のスレッドにより実行されてしまう。また、Threadオブジェクトが、Runnableオブジェクトから生成されるのではなく、run()メソッドをオーバーライドしていないThreadのサブクラスをインスタンス化することによって生成される場合、サブクラスのrun()メソッドはThread.run()メソッドを呼び
The reference documentation is divided into several sections:
java.lang クラス Runtime java.lang.Object java.lang.Runtime public class Runtimeextends Object Java アプリケーションはすべて、Runtime クラスの単一のインスタンスを持ちます。 このクラスは、アプリケーションとアプリケーション実行環境とのインタフェースになります。現在の実行時オブジェクトは、getRuntime メソッドにより取得できます。 アプリケーションは、自分の Runtime クラスのインスタンスを生成することはできません。 導入されたバージョン: JDK1.0 関連項目:getRuntime() メソッドの概要
<noscript> <div>JavaScriptがブラウザで無効になっています。</div> </noscript> <h2>フレーム関連の警告</h2> <p>このドキュメントはフレーム機能を使って表示するように作られています。フレームを表示できないWebクライアントの場合にこのメッセージが表示されます。<a href="overview-summary.html">フレームなしバージョン</a>へのリンク。</p>
はじめに 今回はJavaのマルチスレッドの実装方法について解説します。 マルチスレッドは複数の処理を並行して行いたい場合に使用します。 また、マルチスレッドはThreadというクラスを使用するのですが、 Threadクラスでよく使用するメソッドを紹介したいと思います。 以降、以下のバージョン、環境での解説となります。 IDE:eclipse Javaバージョン:8 OS:Mac OS それでは、早速解説していきます。 1. フォルダ構成 今回作成するサンプルソースのフォルダ構成は以下の通りです。 2. マルチスレッド処理の実装 2-1. サンプルプログラム概要 今回サンプルで実装する内容ですが、メインクラスである「Main.java」を起動し、サブクラスである「SubThreadA.java」と「SubThreadB.java」を並列でスタートさせるという基本的なプログラムを実装します。
インスタンスとオブジェクトは混同しがちで区別がようわからんになりがちです。 とりあえず某所で説明したものを再構成します。 ※2022/12/10追記: クラスに対するのはインスタンスになるべき(たとえばクラス変数とインスタンス変数)なので、ちょっと修正するべきですが、このエントリはそのまま残してます。 クラス・インスタンス・オブジェクト クラスをインスタンス化(実体化)したものがオブジェクト(物)です。 実際に在るものはクラスとオブジェクトで、インスタンスはそれらの関係です。colorsやsportsが並んでるツリーが「オブジェクト」で、右のパレットに並んでるTreeが「クラス」、Treeからみたときのツリーが「インスタンス」ということになります。 ここでツリーはオブジェクトでもインスタンスでもあります。 このように、同じものをオブジェクトともインスタンスともいうことができるので混同してし
原文はこちら。 This article was written by Geoffrey De Smet (Lead and founder of OptaPlanner). https://www.optaplanner.org/blog/2021/09/15/HowMuchFasterIsJava17.html (訳注)日付に関する情報は原文のまま訳しています。 Java 17 (昨日リリースされました)が多数の新機能や改善を伴って登場しました。しかし、そうした新機能などのメリットを享受するためにはコードの変更が必要です。でもパフォーマンスについては別です。シンプルにJDKを置き換えれば、お金をかけずにパフォーマンスを改善できます。しかしながら、どれぐらい改善するのでしょうか?置き換える価値はあるのでしょうか?それでは、JDK 17、JDK 16、JDK 11のベンチマークを比較してみ
DX(デジタルトランスフォーメーション)やIoT(Internet of Things)の進展により、ますますその存在感が増しているオープンソースソフトウェア(OSS)。ソフトウェアの高機能化、大規模化によるサプライチェーンの複雑化を背景に、SBOM(Software Bill of Materials)によるOSSサプライチェーンマネジメントに注目が集まっています。米国では既に必須化・標準化の動きが始まっており、日本企業も対応を迫られるようになってきました。本記事では、あらためてSBOMとは何か、そして日本におけるSBOM活用の普及促進にはどういった課題があるかについて、詳しく解説します。 SBOMとはいったい、どのようなものなのか Software Bill of Materials(SBOM、「エスボム」と読みます))とは、ソフトウェアを構成するOSSや商用ソフトウェアなどのライブラ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く