多线程的第一种启动方式:


1.自己定义一个类继承Thread

2.重写run方法
3.创建子类的对象,并启动线程
 

package text1;

public class MyThread extends  Thread{
    @Override
    public void run() {
        for(int i=0;i<100;i++){
            System.out.println(getName()+"666");
        }
    }
}
package text1;

import java.util.ArrayList;
import java.util.List;

public class main {


    public static void main(String[] args) {
      MyThread mt1=new MyThread();
      MyThread mt2=new MyThread();
      mt1.setName("线程1:");
      mt2.setName("线程2:");
      mt1.start();
      mt2.start();
    }
}

多线程的第二种启动方式:


1.自己定义一个类实现Runnable接口

2.重写里面的run方法
3.创建自己的类的对象
4.创建一个Thread类的对象,并开启线程
 

package text;

public class myrun implements Runnable{

    @Override
    public void run() {
        for(int i=1;i<=100;i++){
            System.out.println(Thread.currentThread().getName()+"666");//注意和第一种的差别
        }
    }
}
package text;

public class main {
    public static void main(String[] args) {
        myrun r=new myrun();
        Thread t1=new Thread(r);
        Thread t2=new Thread(r);
        t1.setName("线程1:");
        t2.setName("线程2:");
        t1.start();
        t2.start();
    }
}

 

多线程的第三种实现方式:


特点:可以获取到多线程运行的结果
1.创建一个类MyCallable实现Callable接口
2.重写call(是有返回值的,表示多线程运行的结果)
3.创建MyCallable的对象(表示多线程要执行的任务〉

4.创建FutureTask的对象(作用管理多线程运行的结果)

5.创建Thread类的对象,并启动(表示线程)

计算1+.....+100
 

package text2;

import java.util.concurrent.Callable;

public class MyCallable implements Callable <Integer>{

    @Override
    public Integer call() throws Exception {
        int sum=0;
        for(int i=1;i<=100;i++){
            sum=sum+i;
        }
        return sum;
    }
}
package text2;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class main {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        MyCallable mc=new MyCallable();
        FutureTask<Integer> f=new FutureTask<>(mc);
        Thread t=new Thread(f);
        t.start();
        Integer temp= f.get();
        System.out.println(temp);
    }
}
05-16 00:18