0

以下は私がthriftサーバーを実装した方法ですが、呼び出し後にメインのtheradに戻りませんserve()

public class ThriftServerRunner implements Runnable {
    private int thriftServerPort;
    public ThriftServerRunner(int thriftServerPort, LogWriter logWriter) {
        this.thriftServerPort = thriftServerPort;   
    }
    @Override
    public void run() {
        try {
            SetupThriftServer();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }               
    }

    private void SetupThriftServer() throws Exception {
    try {
            TServerSocket serverTransport = new TServerSocket(this.thriftServerPort);
            ThriftService.Processor<ThriftService.Iface> processor = new ThriftService.Processor(new ThriftServiceImpl());
            TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));
        server.serve();      
    } catch (TTransportException e) {
            e.printStackTrace();
    }
    }
}
4

1 に答える 1

2

スレッドを開始するために呼び出しstart()ます(これにより新しいスレッドが作成され、次にこの新しいスレッドからオブジェクトrun()関数が呼び出されます)、そうではありませんrun()run()現在のスレッドと同じスレッドから実行されます)。

serve()(別のスレッドから)サーバーを停止しない限り、戻ることを意味するものではありません。

于 2013-03-15T17:07:23.047 に答える