検索
に質問 java - springmvc controller 请求中新开线程的困惑
java - springmvc controller 请求中新开线程的困惑
伊谢尔伦 2017-04-17 14:44:44 表示#ヒョウジ# 670

0

有一个使用场景,在用户一次的访问中,我向steam的dota2接口请求了20条用户的最近比赛记录,然后传到jsp渲染了,我想把这20条记录存在数据库中,这个操作比较耗时,就新开了一个线程这样做会不会导致线程安全问题,好像不推荐在servlet中新开线程?还有其他的解决方案吗?
模拟代码
@RequestMapping("/thread")

@ResponseBody
public String actionThread(){
    Thread t=new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(5000);
                System.out.println("数据库操作");        
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });
    t.start();
    return "nihao";
}

谢谢各位 查了文档用了springmvc容器级的taskexecutor ,可以限制线程数目和等待队列的大小。
<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>

<task:executor id="myExecutor" pool-size="5-10" queue-capacity="100" rejection-policy="CALLER_RUNS"/>
<task:scheduler id="myScheduler" pool-size="10"/>
@Async
public void test(String s){
    try {
        Thread.currentThread().sleep(5000);
        System.out.println("test asny"+s);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
Your Answer
提出する

2 件の回答
0

コントローラで別のスレッドを開かないでください。まず、キャッシュにタイムスタンプがあるかどうかを確認し、リモート アクセスからデータを読み込みます。それ以外の場合は、リモートでアクセスします。

2017-04-17 14:46:44

提出する

0

JSP ページのレンダリングをブロックしないためですか?
1. JSP ページがロードされた後、JS を介して Ajax リクエストを作成し、データベースに参加するインターフェースを呼び出すことができます。
2. 非同期処理に MQ を使用できます

2017-04-17 14:46:44

提出する

Hot Tools

vc9-vc14 (32+64 ビット) ランタイム ライブラリ コレクション (以下のリンク)

vc9-vc14 (32+64 ビット) ランタイム ライブラリ コレクション (以下のリンク)

phpStudy のインストールに必要なランタイム ライブラリのコレクションをダウンロードします。

VC9 32ビット

VC9 32ビット

VC9 32 ビット phpstudy 統合インストール環境ランタイム ライブラリ

PHP プログラマー ツールボックスのフルバージョン

PHP プログラマー ツールボックスのフルバージョン

プログラマ ツールボックス v1.0 PHP 統合環境

VC11 32ビット

VC11 32ビット

VC11 32ビットphpstudy統合インストール環境ランタイムライブラリ

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい