IBMのJavaマルチスレッド - 3.ユビキタススレッド

どこでもスレッド
のスレッドを作成します。1.?
2. AWTとSwing
3. TimerTaskを
4.サーブレットおよびJavaServer Pagesテクノロジー
5. RMIオブジェクトの実装
6.概要

誰がスレッドを作成しますか? (6)1ページ


あなたが明示的に新しいスレッドを作成しない場合でも、あなたはまだスレッドを使用して自分自身を見つけることができます。スレッドは、私たちのプログラムにさまざまなソースから導入されます。

あなたはこれらのツールを使用したい場合は、スレッドがどのように相互作用するかを理解しておく必要があり、そしてどのように互いに干渉のスレッドを防ぐために、スレッドを作成することができ、多くのツールがあります。

AWTとSwing (6)2ページ


AWTやSwingを使っ任意のプログラムは、スレッドに対処しなければなりません。AWTツールボックスは、UIイベントを処理するために単一のスレッドを作成するには、AWTイベントによって呼び出されるイベントリスナーは、AWTイベントスレッドで実行されています。

あなたはリスナーとデータ項目の他のスレッド間で共有イベントへのアクセスを同期化を心配する必要がありますだけでなく、このような大規模な文書のスペルをチェックするなど、イベントリスナーによってトリガ長時間実行タスクを(作るための方法を見つけなければなりませんタスクの実行時に、UI)も、操作をキャンセルするには、ユーザーを妨げることになる(凍結しないように、または、バックグラウンドスレッドで実行されている)ファイルシステム内のファイルを検索します。この良い例は、フレームであるSwingWorker(参照クラスのリソース)。

AWTイベントスレッドデーモンスレッドではありません。これは通常、System.exit()AWTとSwingアプリケーションの終了理由。

TimerTaskをを使用してください (6)ページ3


JDK 1.3は、TimerTaskこのツールは、Java言語に導入されます。この便利なツールは、(例えば、それが今後はタスクから10秒を実行します)時点で、後のタスクを実行する、または定期的なタスク(つまり、タスクは10秒ごとに実行)することができます。

達成Timerクラスは非常に単純です:それはタイマースレッドを作成し、イベントは実行時間によってソートされたキューを構築するのを待ちます。

TimerTask それはプログラムが終了するのを妨げないように、スレッドは、デーモンスレッドとしてマークされています。

タイマースレッドでタイマーイベントが実行されているので、タイマータスクを使用して、任意のデータ項目へのアクセスの適切な同期を確保する必要があります。

ではCalculatePrimes例として、それは我々が使用することができ、睡眠へのメインスレッドを許可していませんでしたTimerTask、次のように、:


    public static void main(String[] args) {
        Timer timer = new Timer();
        
        final CalculatePrimes calculator = new CalculatePrimes();
        calculator.start();

        timer.schedule(
                new TimerTask() {
                    public void run()
                    {
                        calculator.finished = true;
                    }
                }, TEN_SECONDS);
    }
     
servlet 和 JavaServer Pages 技术第 4 页(共6 页)

servlet 容器创建多个线程,在这些线程中执行 servlet 请求。作为 servlet 编写者,您不知道(也不应该知道)您的请求会在什么线程中执行;如果同时有多个对相同 URL 的请求入站,那么同一个 servlet 可能会同时在多个线程中是活动的。

当编写 servlet 或 JavaServer Pages (JSP) 文件时,必须始终假设可以在多个线程中并发地执行同一个 servlet 或 JSP 文件。必须适当同步 servlet 或 JSP 文件访问的任何共享数据;这包括 servlet 对象本身的字段。





实现 RMI 对象
第 5 页(共6 页)

RMI 工具可以让您调用对在其它 JVM 中运行的对象进行的操作。当调用远程方法时,RMI 编译器创建的 RMI 存根会打包方法参数,并通过网络将它们发送到远程系统,然后远程系统会将它们解包并调用远程方法。

假设您创建了一个 RMI 对象,并将它注册到 RMI 注册表或者 Java 命名和目录接口(Java Naming and Directory Interface (JNDI))名称空间。当远程客户机调用其中的一个方法时,该方法会在什么线程中执行呢?

实现 RMI 对象的常用方法是继承 UnicastRemoteObject。在构造 UnicastRemoteObject 时,会初始化用于分派远程方法调用的基础结构。这包括用于接收远程调用请求的套接字侦听器,和一个或多个执行远程请求的线程。

所以,当接收到执行 RMI 方法的请求时,这些方法将在 RMI 管理的线程中执行。




小结
第 6 页(共6 页)

线程通过几种机制进入 Java 程序。除了用 Thread 构造器中显式创建线程之外,还可以用许多其它机制创建线程:

AWT 和 Swing RMI java.util.TimerTask 工具 servlet 和 JSP 技术


ます。https://www.cnblogs.com/licheng/archive/2008/09/23/1296809.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34152820/article/details/92631597