Java 线程的启动和创建

Java共有三种方法来创建和启动线程:

一、继承Thread类:

        1、创建线程并重写run()方法。

        2、创建子类对象并通过start()方法启动线程。

二、实现Runnable接口:

        1、创建线程并重写run()方法。

        2、创建Thread对象,把实现了Runnable接口的对象作为参数传入,并通过Thread对象的start方法启动。

三、实现Callable接口,不作了解。

注意:

继承Thread类方式的多线程:

• 优势:编写简单。

• 劣势:无法继承其它父类。

实现Runnable接口方式的多线程:

• 优势:可以继承其它类,多线程可共享同一个Runnable对象,同一Runnable对象中的变量也是共用的。

• 劣势:内部无start()方法,需创建Thread对象。访问当前线程时需调用Thread.currentThread()方法。

Runnable接口方式要通用一些。

要点:

1、新建的线程不会自动开始运行,必须通过start( )方法启动。

2、start方法是Thread内的方法,不是Runnable接口的方法。

继承Thread:

class 继承Thread extends Thread {//继承Thread
    @Override//重写run()
    public void run() {//线程入口点,方法内是线程体
        for(int i=0;i<20;i++) {
            System.out.println("i'am Thread");
        }
    }
    public static void main(String[] args) {
        继承Thread st = new 继承Thread();//创建子类对象
        st.start();//启动
        for(int i=0;i<20;i++) {
            System.out.println("i'm the main");
        }
    }
}

实现Runnable接口:

class 实现Runnable implements Runnable {//实现Runnable接口
    @Override
    public void run() {
        for (int i=0;i<10;i++) {
            System.out.println("i'm thread too");
        }
    }
    public static void main(String[] args) {
        //创建Thread对象,把实现了Runnable接口的对象作为参数传入;
        Thread thread1 = new Thread(new 实现Runnable());
        thread1.start();//启动线程;
        Thread thread2 = new Thread(new 实现Runnable());
        thread2.start();
    }
}

实现Callable接口:

public class 实现Callable implements Callable<Boolean> {//实现Callable接口
    private String srcName;
    private String destName;
    public 实现Callable(String srcName, String destName) {
        this.srcName = srcName;
        this.destName = destName;
    }
    public Boolean call() throws Exception {
        FileUtils f = new FileUtils();
        f.copy(srcName,destName);
        return true;
    }
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        实现Callable c1 = new 实现Callable("aaa.txt","aa.txt");
        实现Callable c2 = new 实现Callable("bbb.txt","bb.txt");
        //创建执行服务:
        ExecutorService ser = Executors.newFixedThreadPool(2);
        //提交执行:
        Future<Boolean> result1 =ser.submit(c1);
        Future<Boolean> result2 =ser.submit(c2);
        //获取结果:
        boolean r1 =result1.get();
        boolean r2 =result2.get();
        //关闭服务:
        ser.shutdownNow();
    }
}



 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值