zoukankan      html  css  js  c++  java
  • java学习之- 线程继承Thread类

    标签(空格分隔): 线程


    在java。lang包中有个Thread子类,大家可以自行查阅文档,及范例;

    如何在自定义的代码中,自定义一个线程呢?

    1.通过对api的查找,java已经提供了对线程这类事物的描述,就是Thread类,创建线程的第一种方式,就是继承Thread类:
    2.public void run(),如果该线程是使用独立的Runnable运行对象的run方法,否则该方法不执行任何操作并返回,Thread的子类应该重写该方法;
    3.查看API的时候:查看start方法,使用该线程开始执行,java虚拟机调用该线程的run方法;

    class Demo extends Thread{
        pulbic void run(){
            System.out.println("Demo run");
        }
    }
    class ThreadDemo{
        public static void main(String[] args){
            Demo d=new Demo();
            d.start();
            
        }
    }
    

    上述:
    创建一个子类的步骤如下:
    1.定义类继承Thread;
    2.复写Thread的run方法;
    3.调用线程的start方法,该方法有两个作用,一个启动线程,二调用run方法;
    4.new一个对象的时候只是创建了一个线程,并未执行,只有调用了start的方法才是被执行了;

    如下代码的分析

    package com.wangaling;
    class Demo extends Thread{
        public void run(){
            for(int x=0;x<60;x++) {
                System.out.println("demo run-----"+x);
            }
        }
    }
    class ThreadDemo{
    
        public static void main(String[] args){
            Demo d= new Demo();//创建好一个线程
            d.start();
            for(int x=0;x<60;x++){
                System.out.println("helloworld!----"+x);
            }
        }
    }
    

    执行结果:

    demo run-----0
    helloworld!----0
    demo run-----1
    helloworld!----1
    demo run-----2
    helloworld!----2
    demo run-----3
    helloworld!----3
    helloworld!----4
    helloworld!----5
    helloworld!----6
    demo run-----4
    helloworld!----7
    demo run-----5
    helloworld!----8
    demo run-----6
    helloworld!----9
    demo run-----7
    helloworld!----10
    demo run-----8
    helloworld!----11
    demo run-----9
    demo run-----10
    helloworld!----12
    demo run-----11
    helloworld!----13
    helloworld!----14
    demo run-----12
    helloworld!----15
    demo run-----13
    helloworld!----16
    demo run-----14
    helloworld!----17
    demo run-----15
    helloworld!----18
    demo run-----16
    helloworld!----19
    demo run-----17
    helloworld!----20
    helloworld!----21
    demo run-----18
    helloworld!----22
    demo run-----19
    helloworld!----23
    demo run-----20
    helloworld!----24
    demo run-----21
    helloworld!----25
    demo run-----22
    helloworld!----26
    demo run-----23
    helloworld!----27
    helloworld!----28
    helloworld!----29
    helloworld!----30
    helloworld!----31
    demo run-----24
    helloworld!----32
    demo run-----25
    helloworld!----33
    helloworld!----34
    demo run-----26
    helloworld!----35
    demo run-----27
    helloworld!----36
    demo run-----28
    helloworld!----37
    helloworld!----38
    demo run-----29
    helloworld!----39
    demo run-----30
    helloworld!----40
    demo run-----31
    demo run-----32
    demo run-----33
    demo run-----34
    demo run-----35
    demo run-----36
    demo run-----37
    demo run-----38
    helloworld!----41
    demo run-----39
    helloworld!----42
    demo run-----40
    helloworld!----43
    demo run-----41
    helloworld!----44
    demo run-----42
    helloworld!----45
    helloworld!----46
    helloworld!----47
    helloworld!----48
    helloworld!----49
    demo run-----43
    helloworld!----50
    helloworld!----51
    demo run-----44
    helloworld!----52
    demo run-----45
    helloworld!----53
    helloworld!----54
    helloworld!----55
    helloworld!----56
    demo run-----46
    helloworld!----57
    demo run-----47
    helloworld!----58
    demo run-----48
    demo run-----49
    demo run-----50
    demo run-----51
    demo run-----52
    demo run-----53
    demo run-----54
    helloworld!----59
    demo run-----55
    demo run-----56
    demo run-----57
    demo run-----58
    demo run-----59
    
    Process finished with exit code 0
    
    
    

    上述结果产生的分析:
    1.main----->d=new demo()产生了一个新的控制单元---->start()开启新的控制单,执行:demo run;
    2.main----->d=new demo()---->start()-->新的控制单元,同时朱函数还要继续执行:helloworld;
    3.以上就开启一个多线程;
    4.ThreadDemo开启了2个执行路径:一个是main,一个是d,那么两个会同时执行吗?其实是不可能的,Windows是多任务操作系统,你看着电视听这音乐,看着是同时执行,其实不是的,执行以下电视,执行以下音乐,他在两个任务之间做了快速切换,你要知道CPU切换的是进程里面的线程,所以到这里大家就会明白为啥任务开的多,反而越慢;
    5.目前我们的例子是:一个进程里面有多个线程,多个线程抢夺CPU资源,谁抢到CPU的资源,谁就执行,通过打印看到效果;
    6.电脑实现双核,是不是CPU就可以实现了同时执行,双核之后内存就是瓶颈;
    7.发现运行结果每次都不同:因为多个线程都在获取CPU的执行使用权,CPU执行到谁,谁就运行明确一点,在某一个时刻,只能有一个程序在运行,当然多核除外,CPU在做着快速的切换,已达到看上去同时执行的效果,我们可以形象的把多线程的运行形容为在互相抢夺CPU的资源或者称之为执行权,这就是多线程的一个特性,叫随机性,谁抢到谁执行,至于执行多长时间目前是CPU说的算;

  • 相关阅读:
    远程过程调用RPC
    CAP原理
    2021/03/08阿里在线笔试问题总结
    水容器问题
    rand5生成rand3和rand7
    二维数组查找K(Go语言)
    判别IP为IPV4或者IPV6 (Go语言)
    路径总和(Go)
    合并K个升序链表(Go)
    delphi idhttp提交网址包含中文
  • 原文地址:https://www.cnblogs.com/surewing/p/11421710.html
Copyright © 2011-2022 走看看