何为线程
多线程的优势
具体步骤
派生 Thread 子类
覆写 run 方法
调用 start 方法
class Test{
public static void main(String[] args){
Thread t = new MyThread();
t.start();
System.out.println("主线程...");
}
}
class MyThread extends Thread{
@Override
public void run(){
System.out.println("子线程...");
}
}
关于参数传递的案例
public class ExtendsThread extends Thread{
private String name;
public ExtendsThread(String name){
this.name = name;
}
// 继承Thread 覆写run方法
@Override
public void run(){
for (int i = 0; i < 10; i++){
System.out.println(name + i);
}
}
public static void main(String[] args) {
// 创建派生线程类实例,调用start()方法
Thread t = new ExtendsThread("子线程");
t.start();
System.out.println("主线程end...");
}
}
具体步骤
实现 Runnable 接口
覆写 run 方法
将变量作为参数,通过Thread静态代理执行start()方法
public class ImpRunnable implements Runnable{
@Override
public void run(){
for (int i = 0; i < 10; i++){
System.out.println(Thread.currentThread().getName() + i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// 创建多个实例
ImpRunnable t = new ImpRunnable();
new Thread(t, "1线程").start();
new Thread(t, "2线程").start();
new Thread(t, "3线程").start();
}
}
多个线程同时访问单一对象
public class ImpRunnable2 implements Runnable{
private int num = 10;
@Override
public void run(){
while (num > 0){
System.out.println(Thread.currentThread().getName() + num--);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ImpRunnable2 num = new ImpRunnable2();
new Thread(num, "1线程").start();
new Thread(num, "2线程").start();
new Thread(num, "3线程").start();
}
}
具体步骤
实现Callable接口,自定义返回值类型
覆写call方法,需要抛出异常
创建目标对象
创建执行服务
提交执行
获取结果
关闭服务
public class ImpCallable implements Callable<Boolean> {
private String name;
public ImpCallable(String name){
this.name = name;
}
@Override
public Boolean call(){
for (int i = 0; i < 10; i++){
System.out.println(name + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return true;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
// 创建线程对象
ImpCallable t1 = new ImpCallable("1");
ImpCallable t2 = new ImpCallable("2");
ImpCallable t3 = new ImpCallable("3");
// 创建执行服务
ExecutorService ser = Executors.newFixedThreadPool(3);
// 提交执行
Future<Boolean> r1 = ser.submit(t1);
Future<Boolean> r2 = ser.submit(t2);
Future<Boolean> r3 = ser.submit(t3);
// 获取结果
Boolean rs1 = r1.get();
Boolean rs2 = r2.get();
Boolean rs3 = r3.get();
// 关闭服务
ser.shutdownNow();
}
}
原文:https://www.cnblogs.com/rainful/p/14905360.html