java中的多线程一:实现多线程

多线程是为了提高程序执行的效率,它与进程最大的区别在于:进程拥有自己的一整套变量,而多线程之间共享数据,这就可能造成多线程数据的不同步。
那么如何实现多线程呢,java.Long.Thread类中是这样描述的:

声明一个集成Thread的子类,该子类需要覆盖(override)Thread类的run()方法,并在run中实现需要在线程中执行的功能。如下所示:

public class myThread extends Thread {
    /*
     * 该类的域值部分
     */
    private String name;
    //利用构造器传入参数
    public myThread(String name) {
        super();
        this.name = name;
    }
    @Override
    public void run(){
        //在这里实现要在线程中执行的部分
        sayName();
    }
    /*
     * 该类中的方法
     */
    public void sayName(){
        System.out.println(name);
    }
}

在需要执行的地方按照下面的方式来启动该线程:

Thread t=new myThread(caiger);
t.start();

另一种方法是声明一个实现了Runnable接口的类,Runnable接口只包含一个run()方法,这个类需要实现run方法,并在run方法中实现需要在线程中执行的功能。具体声明只需要将上述代码中的“myThread extends Thread ”改成“myRunnable implements Runnable”就可以了。在需要执行线程的地方按照下边方式:

Runnable r =new myRunnable(caiger);
Thread t= new Thread(r);
t.start();

JDK1.5之后添加了新的Executor接口来管理Thread对象。在java中,Thread并不是要执行的异步任务的实体,可以理解为它只是任务的载体,实现了多线程的功能来驱动任务的执行。而Executor通过间接的管理任务,避开了对Thread生命周期的管理。Executor接口中唯一的方法是void execute(Runnable command)
通过这个方法,执行了实现Runnable接口的类中的run方法,也就是要在多线程中执行的任务。以下是使用的方式:

ExecutorService exec =Executors.newCachedThreadPool();
exec.execute(new myRunner)//myRunner实现了Runnable接口
exec.shutdown();

其中ExecutorService是Executor的子接口,由Executors中包含的工厂方法来提供具体实现,ExecutorService包含对线程池中各线程中任务的操作和控制。
可以通过实现ThreadFactory接口来实现自己的线程工厂,该接口只包含Thread newThread(Runnable r),方法,同过实现该方法来定制由Executor创建的线程的属性(后台,优先级,名称等)。在使用时调用Executors中需要工厂对象的工厂方法即可。
Executor使我们不需要去考虑线程究竟是如何运行的,而只需要对他们发出命令就可以了。
ExecutorService中的submit方法接收实现Callable接口的对象,Callable是泛型接口,包含承载任务的call(不是run)方法,其泛型参数是call方法中返回的值,也就是线程中任务返回的值。submit的返回实现了Future接口的对象,表示当前正在执行的任务。通过Future中的方法来控制该任务,get方法可以在计算结束或者等待时间到达时获得返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值