-1

また、volatile および synchronized 修飾子が何をするのか完全には理解していません。しかし、基本的にこれは、YouTubeシリーズから学ぶゲームの始まりであると考えられており、これまでのところ、内部でメソッドの更新とレンダリングを実行するwhileループを持つスレッドを開始するだけです。問題は、色の設定と長方形の作成以外に、render メソッドで何も理解していないことです。

package game;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;

import javax.swing.JFrame;

public class Game implements Runnable {

    public static Thread Game;
    public volatile boolean running = false;

    public void start() {
        running = true;
        Game = new Thread(this);
        Game.start();
    }

    public synchronized void stop() {
        running = false;
        try {
            Game.join();
        } catch (InterruptedException e) {
            System.out.println("asddsa");
        }

    }

    public void update() {

    }

    public void render() {
        BufferStrategy bs = GameFrame.GraphicsBoard.getBufferStrategy();
        if (bs == null) {
            GameFrame.GraphicsBoard.createBufferStrategy(3);
            return;
        }
        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, GameFrame.GraphicsBoard.getWidth(),
                GameFrame.GraphicsBoard.getHeight());
        g.dispose();
        bs.show();
    }

    public synchronized void run() {
        new GameFrame();

        while (running) {
            update();
            render();
        }

    }

}
4

1 に答える 1

2

揮発性

Java の Volatile は、この変数の値をキャッシュせず、常にメイン メモリから読み取る Java コンパイラとスレッドへのインジケータとして使用されます。

このコード例では、1 つのスレッド (ゲーム スレッド) が「running」の値を毎回メイン メモリから取得する代わりにキャッシュできます。このスレッドには表示されません。java でboolean 変数「running」を volatile にすると、このケースが発生しなくなります。

同期

Synchronized は、メソッドをスレッド セーフにするために使用されます。

編集:以下の長い答え。

コードがマルチスレッド環境で実行されている場合、状態の破損や予期しない動作を回避するために、複数のスレッド間で共有されるオブジェクトを同期する必要があります。

java の synchronized キーワードは、共有リソースの相互排他アクセスを保証し、データ競合を防止するロックを提供します。また、スレッドは、同期されたコードにアクセスする前にロックを取得する必要があります。

同期は、メソッド全体または特定のブロックに対して実行できます。この例は、メソッドの同期を示しています。メソッド全体がロックされ、いつでも 1 つのスレッドだけがメソッドにアクセスできることを意味します。

パフォーマンスが低下する可能性があるため、メソッドの同期はお勧めしません。この返信でカバーしていない他の長所と短所があります。

于 2013-01-06T10:34:48.780 に答える