多线程Java如何为多个线程同步运行函数
我必须使用名为changeCase
的Runnable
类的三个实例,并且对于所有三个changeCase
实例,只能使用Server
类的一个实例。进程执行需要连续运行,这就是为什么我在被重写的run
方法中使用了while (true)
。每个线程的process
方法执行是重叠的。我该如何解决这个问题
我的代码:
package uppercase;
import java.util.Scanner;
class Server {
void process(String threadName) {
System.out.println("You are inside the Server " +threadName);
System.out.println("Enter your sentence");
Scanner sc1 = new Scanner(System.in);
String input = sc1.nextLine();
System.out.println("Press 1 to convert to Uppercase or Press 2 to convert to Lowercase");
Scanner sc2 = new Scanner(System.in);
int num = sc2.nextInt();
switch (num) {
case 1:
changetoUpperCase(input);
break;
case 2:
changetoLowerCase(input);
break;
default:
System.out.println("Invalid number given\n\n");
break;
}
}
void changetoUpperCase(String msg) {
printMessage(msg.toUpperCase());
}
void changetoLowerCase(String msg) {
printMessage(msg.toLowerCase());
}
void printMessage(String msg) {
System.out.println("[ " +msg+ " ]\n\n");
try {
Thread.sleep(1000);
}catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
class changeCase implements Runnable {
String threadName;
Server target;
Thread t;
public changeCase(Server c, String s) {
this.threadName = s;
this.target = c;
}
@Override
synchronized public void run() {
while(true) {
target.process(threadName);
}
//target.process(threadName);
}
}
public class UpperCase {
public static void main(String[] args) {
Server s1 = new Server();
Thread t1 = new Thread(new changeCase(s1, "Thread1"));
Thread t2 = new Thread(new changeCase(s1, "Thread2"));
Thread t3 = new Thread(new changeCase(s1, "Thread3"));
t1.start();
t2.start();
t3.start();
}
}
我需要的输出:
run:
You are inside the Server Thread1
Enter your sentence
hello world
Press 1 to convert to Uppercase or Press 2 to convert to Lowercase
1
[ HELLO WORLD ]
You are inside the Server Thread3
Enter your sentence
HELLO WORLD
Press 1 to convert to Uppercase or Press 2 to convert to Lowercase
2
[ hello world ]
You are inside the Server Thread2
Enter your sentence
hello world
Press 1 to convert to Uppercase or Press 2 to convert to Lowercase
4
Invalid number given
You are inside the Server Thread3
Enter your sentence
我得到的输出:
run:
You are inside the Server Thread1
Enter your sentence
You are inside the Server Thread2
Enter your sentence
You are inside the Server Thread3
Enter your sentence
共 (0) 个答案