美文网首页
java线程的理解及实现(1)

java线程的理解及实现(1)

作者: 撩人的风光 | 来源:发表于2020-03-17 17:02 被阅读0次

什么是线程:

Java 语言提供了并发机制,允许开发人员在程序中执行多个线程,每个线程完成一个功能,并与其他线程并发执行。这种机制被称为多线程。简单的说线程就是执行代码的一个模块。

线程分为:主线程、子线程 。写在main方法中的所有代码都是运行在主线程的,而子线程就是需要创建新的线程,在主线程创建的所有的线程都是子线程。

线程的创建:

线程的实现方式有很多种,都是大同小异的用法。这里简单较少几种:继承Thread类实现抽象方法run;实现Runable接口实现抽象方法run;实现Callable接口,并用其初始化Thread,然后创建Thread实例等方法;

Thread实现线程:

//定义线程
public class DThread extend Thread{
    @Override
    public void run(){
        //运行在子线程
        int i = 0;
        while (i <= 100) {
             System.out.println("子线程" + i + "\n");
             i ++;
         }
    }
}

public class Run{
    public static void main(String[] args){
        DThread dt = new DThread();//创建线程实例    运行在主线程
        dt.start();//启动线程     运行在主线程
        int i = 0;
        while (i <= 100) {
            System.out.println("主线程" + i + "\n");
            i ++;
        }
    }
}

我们来看一下运行结果:

主线程8

主线程9

主线程10

主线程11

主线程12

主线程13

主线程14

主线程15

子线程0

主线程16

主线程17

主线程18

主线程19

主线程20

主线程21

主线程22

这是我截取的部分结果可以看到主线程15之后是子线程0,由此可得:线程是一直在切换的,切换并无规律可言,不管有多少的线程都是一直在切换代码运行,这就是线程并行,并行的好处就是更加高效率的利用了cpu的资源,同时这个也是缺点开大量的线程cpu可能处理不过来造成了Out Of Memory,也就是内存溢出的问题。

Runable接口实现线程:

class DRunable implements Runnable{
    @Override
    public void run() {
        // 运行在子线程
    }
}

public static void mian(String[] args){
    DRunable dr = new DRunable();//创建线程实例     运行在主线程
    Thread t = new Thread(dr);//创建线程 传入runable实例  运行在主线程
    t.start();//启动线程    运行在主线程
}

运行结果和Thread实现的线程没有区别。

有没有发现一个问题,runnable接口实现的线程是需要Thread来启动线程的,那么为什么还会有Runnable接口呢,或者说Runnable这么麻烦为什么还不淘汰?就是因为 单继承  多实现 的原理,讲到这里大家知道为什么还会有runnnable接口了吗?

Callable实现线程:

Callable线程保证了只执行一个,就是说同开5个DCallable线程运行结果只执行了一次,看代码:

class DCallable  implements Callable<Integer>{   //泛型String规定了线程返回的参数类型
    public Integer call() throws Exception{
        //运行在子线程
        String s = "1 + 1 = 2 "; 
        System.out.println(s);
        return null;
    }
}

public static void main(String[] args){
    DCallable< Integer > dc = new DCallable();//创建线程实例    运行在主线程
    FutureTask< Integer > ft = new FutureTask(dc); //创建futureTask实例   运行在主线程
    new Thread(ft).start();//启动线程   运行在主线程
}

好了今天我们介绍了三种线程的实现方式及简单的理解,还有一种实现方式或者说线程的管理线程池CachedThreadPool,我们在下次进行介绍。

相关文章

网友评论

      本文标题:java线程的理解及实现(1)

      本文链接:https://www.haomeiwen.com/subject/dcbtyhtx.html