Runnable接口实现多线程
Runnable接口的定义
public interface Runnable{
public void run();
}
这种函数式接口规定了,只有一个run方法。那么只需要让一个类实现Runnable接口即可,并且也需要覆写run方法。
static class ThreadExecute1 implements Runnable {
/sqlnode1_table.sql
public void run() {
// execute sqlnode1
try (Connection conn = HostMulti.startThreadConn1()) {
// create ScriptRunner
ScriptRunner runner = new ScriptRunner(conn);
runner.setErrorLogWriter(null);
runner.setLogWriter(null); //output no log
FileReader read = new FileReader(new File("/server/scipts/sqlnode1_table.sql"));
runner.runScript(read);
System.out.println("sql1 execute sucessfully!");
} catch (Exception e) {
System.out.println("sql1 execute failed!");
e.printStackTrace();
}
}
}
与继承Thread相比,MyThread类在结构上没有区别 ,如果想继承Thread类,同时也继承了start 方法,但是如果实现的是Runnable接口,并没有start方法可以调用。
- 在测试MySQL的生产环境,一般Runnable主要用于多线程测试
格式如下:
// 创建接口类或继承Runnable
class interface Runnable{
void run()l;
}
//或
public class A implements Runnable{
public static void run();
}
// 在主函数创建对象
public static void main(String[] args)
{
A test = new A();
new Thread(test).start();
}
下面是完整的多线程语句:
public static void main(String[] args) throws Exception
{
Test_three test3 = new Test_three();
test3.start();
// multi thread execute create user
startExecuteUser();
ThreadExecute1 thread1 = new ThreadExecute1();
ThreadExecute2 thread2 = new ThreadExecute2();
ThreadExecute3 thread3 = new ThreadExecute3();
// multi thread execute sql
new Thread(thread1).start();
new Thread(thread2).start();
new Thread(thread3).start();
// multi thread execute rename table
Sqlnode1Rename rename1 = new Sqlnode1Rename();
Sqlnode2Rename rename2 = new Sqlnode2Rename();
Sqlnode3Rename rename3 = new Sqlnode3Rename();
new Thread(rename1).start();
new Thread(rename2).start();
new Thread(rename3).start();
checkRename();
}
}