Java多线程(一)
Java多线程(一)
spilledyear 发表于4个月前
Java多线程(一)
  • 发表于 4个月前
  • 阅读 3
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

什么是多线程

我一直都是这样理解的,多线程就是并发,不过这个并发要分几种情况:在多处理器的机器上,就是真并发;在单处理器的机器上,就是伪并发。那什么是真并发?什么是伪并发呢?

  • 真并发
    真并发就相当有好几个人同时在做一件事情,不过这几个人的分工不一样。比如说:打扫卫生就是这件事情。但是我们知道,打扫卫生是一件大事情,于是我们可以将它细分,比如说:扫地,烧水,洗衣服,倒垃圾......这个时候,每件事情都已经很清楚了,于是我们可以将这些小事情分给不同的人去做,他去倒垃圾、她去烧水,在同一时刻,他们都在处理自己的事情。在我看来,这就是真并发,因为在同一时刻,每个人都在做自己的事情,这肯定是并发嘛,对吧。
  • 伪并发
    那伪并发呢?还是打扫卫生,事情还是那么多:扫地,烧水,洗衣服,倒垃圾......不过这次只有一个人,一个人要完成所有的事情。按照一般顺序,正常情况我们是怎么做呢?是不是先扫地,然后烧水,然后洗衣服......其实这种顺序,恰好就是我们的程序在没有使用多线程时的执行顺序,就是按顺序执行。但在现实生活中很明显我们不会这样做的,现实生活中我们是怎么做的呢?我们一般会先打火烧水,然后再烧水的同时,我们去扫扫地,顺便倒一下垃圾,有时间的话再去洗一下衣服,到最后,三件事情都做好了,水也烧好了,这样是不是节约了很多时间呢?其实这种情况就很像是我们的伪并发,我们编写某个程序就是为了要完成某个某件事情,而这件事情很明显可以再细分,这时候我们可能就会用到所谓的多线程。比如说我们先通过执行main(String[] args)启动一个线程,然后在执行main方法的途中,启动了其他几个线程,最后包括main在内的这几个线程并发执行(在多处理器上真并发执行,在单处理器上伪并发执行,应该是这样吧?)。在计算机组成原理中有个时间片的概念,我不太清楚,应该就是这个道理,某个程序就是一个进程,一个进程可以由一个或多个线程组成,就相当于打扫卫生可以由扫地,烧水,洗衣服,倒垃圾组成,一个打扫卫生的人就相当于一个处理器。在多处理器上的机器上,就相当于有多个打扫卫生者,那切切实实的就是并发执行。在单处理器的机器上,因为只有一个打扫卫生者,所以操作系统会为每个线程分配不同的时间片,因为时间片的范围很小,让我们感觉是在同时执行,其实我觉得这就是伪并发。

实现多线程的两种方式

  • 实现Runnable接口,重写run方法
public class LiffOff implements  Runnable{

    private int countDown = 10;
    private static int taskCount = 0;
    private final int id = taskCount++;
    public LiffOff(int countDown){
        this.countDown = countDown;
    }
    public String status(){
       return "#" + id + "( " +(countDown > 0 ? countDown : "LiffOff") + " )";
    }

    @Override
    public void run() {
        while(countDown-- > 0){
            System.out.println(status());
            Thread.yield();
        }
    }

    public static void main(String[] args){
        LiffOff liffOff = new LiffOff(12);
        Thread thread = new Thread(liffOff);
        thread.start();

        for(int i = 0 ; i < 11 ; i++){
            System.out.println("Main 线程 " +i);
            new Thread(new LiffOff(i)).start();
        }
    }
}
  • 继承Thread类
class MyThread extends Thread{
    public static void main(String[] args){
        new MyThread().start();
    }

    public void run(){
        System.out.println("Do it");
    }
}

我推荐通过实现Runnable的方法是实现多线程,为什么?因为在Java中是单继承,如果继承了Thread类,那就不能再集成别的Class了,所以还是觉得通过实现Runnable接口来实现多线程比较好一些。

标签: Java 多线程
共有 人打赏支持
粉丝 0
博文 8
码字总数 4806
×
spilledyear
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: