【Java多线程与并发库】01 传统线程技术

【Java多线程与并发库】01 传统线程技术

创建线程的两种传统方式

Java可以通过继承Thread类,覆写run方法自定义线程类,或者实现Runnable接口,覆写run方法,并将其传递给Thread的构造方法创建线程对象。

继承Thread类创建线程类

继承Thread类,覆写run方法。
run方法被称为线程执行体。
可以调用线程对象的start方法启动线程。

需要注意的是run方法并不是抽象方法,Thread也不是抽象类。
Thread中run方法如下:

public void run() {
   if (target != null) {
       target.run();
   }
}

继承Thread类创建线程类的代码示例

 public static void main(String... args){
     Thread thread1 = new Thread(){
         int counter = 0;
         @Override
         public void run(){  // 覆写run方法,线程执行体
             String threadName = Thread.currentThread().getName();
             while(true) {
                  System.out.println(threadName + "-" + counter);
                  counter++;
                  if (counter >= 1000) break;
             }
         }
     };
     thread1.start(); //启动线程
}        

实现Runnable接口创建线程类

实现Runnable接口,覆写run方法,将实例传递给Thread的构造方法。

public static void main(String... args){
    Thread thread2 = new Thread(new Runnable() {  //宿主
        int counter = 0;
        @Override
        public void run() {
            while (true){
                System.out.println(Thread.currentThread().getName());
                if (counter ++ >= 10) break;
            }
        }
    });
    thread2.start();
}

Thread 和 Runnable 对比:

采用实现Runnable接口的方式创建多线程的优缺点
优点:

  1. 线程类只是实现了Runnable接口,还可以继承其他类
  2. 多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,姣好的体现面向对象的思想。

缺点:

  1. 编程稍微复杂,如果需要访问当前线程,则必须使用Thread.currentThread()方法,而Thread方式可以使用this访问当前线程。

采用继承Thread的方式创建多线程的优缺点
优点:

  1. 编程简单,如果需要访问当前线程,Thread方式可以使用this访问当前线程,而实现Runnable方法则必须使用Thread.currentThread()方法。

缺点:

  1. 因为线程已经继承了Thread类,所以不能再继承其他父类。

小结:
Runnable更能体现面向接口编程。建议实现Runnable接口,而不是继承Thread覆写run方法


一个问题

多线程机制会提高程序的运行效率吗?为什么会有多线程下载呢?
不一定。因为线程的创建和上下文切换也是有开销的。
多线程下载,可以抢占服务器端的带宽资源。

参考

《Java并发编程的艺术》
《Java疯狂讲义》

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值