teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

final、}を追加した。

2015/08/10 07:37

投稿

eripong
eripong

スコア1546

answer CHANGED
@@ -13,7 +13,7 @@
13
13
  ```lang-java
14
14
  public static void main(String args[]) {
15
15
  try {
16
- StringBuffer buff = new StringBuffer();
16
+ final StringBuffer buff = new StringBuffer();
17
17
 
18
18
  final ConsoleReader reader = new ConsoleReader();
19
19
  while (true) {
@@ -48,6 +48,7 @@
48
48
  } catch (Throwable t) {
49
49
  t.printStackTrace();
50
50
  }
51
+ }
51
52
  ```
52
53
 
53
54
  実行結果:

2

サンプルコードを追加した

2015/08/10 07:37

投稿

eripong
eripong

スコア1546

answer CHANGED
@@ -2,4 +2,59 @@
2
2
  プロンプトとhogeがどの様な順で出力されるかは、決まらないです。
3
3
 
4
4
  それが、非同期ということと思うのですが、
5
- 何のためにその様にしたいのでしょうか?
5
+ 何のためにその様にしたいのでしょうか?
6
+
7
+ ### サンプルコード
8
+ 少しは近い状態になったと思います。
9
+ copyが完了した瞬間に出力、といいうのはJLineに手を入れないと難しそうなので、
10
+ copyが完了した後、Enterした際に表示する、という形にしています。
11
+
12
+
13
+ ```lang-java
14
+ public static void main(String args[]) {
15
+ try {
16
+ StringBuffer buff = new StringBuffer();
17
+
18
+ final ConsoleReader reader = new ConsoleReader();
19
+ while (true) {
20
+ String line = reader.readLine(">");
21
+ synchronized (buff) {
22
+ if (buff.length() > 0) {
23
+ reader.resetPromptLine(buff.toString() + "\n", "", -1);
24
+ buff.delete(0, buff.length());
25
+ }
26
+ }
27
+ if (line != null) {
28
+ if (line.split(" ")[0].equalsIgnoreCase("copy")) {
29
+ System.out.println("Start Copy Thread");
30
+ Thread thread = new Thread(new Runnable() {
31
+ @Override
32
+ public void run() {
33
+ // Dummy
34
+ try {
35
+ Thread.sleep(1000);
36
+ } catch (InterruptedException e) {
37
+ e.printStackTrace();
38
+ }
39
+
40
+ buff.append("End Copy Thread");
41
+ }
42
+ });
43
+ thread.start();
44
+ }
45
+ }
46
+
47
+ }
48
+ } catch (Throwable t) {
49
+ t.printStackTrace();
50
+ }
51
+ ```
52
+
53
+ 実行結果:
54
+ ```
55
+ >copy
56
+ Start Copy Thread
57
+ > (ここでEnter入力)
58
+ End Copy Thread
59
+ >
60
+ ```

1

途中で投稿してしまったので追記

2015/08/10 06:35

投稿

eripong
eripong

スコア1546

answer CHANGED
@@ -1,4 +1,5 @@
1
1
  プロンプトを出力するスレッドと、hogeと出力するスレッドを別にしているので、
2
2
  プロンプトとhogeがどの様な順で出力されるかは、決まらないです。
3
3
 
4
- それが、非同期ということと思うのですが、
4
+ それが、非同期ということと思うのですが、
5
+ 何のためにその様にしたいのでしょうか?