码迷,mamicode.com
首页 > 编程语言 > 详细

33. 自定义线程

时间:2018-04-27 21:14:58      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:难题   多个   不同   windows   run   自己的   父类   oid   window   

1.进程

定义:正在进行的程序叫作一个进程。进程负责了内存空间的划分

疑问:windows号称是多任务的操作系统,那么是同时运行多个程序的吗?

  从宏观角度:windows确实是同时运行多个应用程序

  从微观角度:cpu做了快速的切换动作,只是太快了,我们肉眼看不出切换而已

 

2.线程

定义:线程在一个进程中负责了代码的执行,就是一个进程的路径

 

3.多线程

定义:在一个进程中有多个线程在执行不同的代码。

 

疑问:按照上面的定义,那我们之前的程序为什么可以执行了?

   原来当我们运行程序的时候jvm会创建一个main线程执行main方法中的代码

注意:一个java中至少有2个线程,一个是mian线程,一个执行垃圾回收器

多线程的好处:

      1. 解决了一个进程执行多个任务的难题

      2. 提高了资源的利用率(而不是提高了效率)

多线程的坏处:

      1.增加了cpu的负担

      2.降低了一个线程的执行率

      3.引出了线程安全问提

      4.出现了死锁现象

 

4.创建线程

方式一:

    1.自定义一个类继承Thread类

    2.重写run方法

      疑问:为什么我们要重写父类的run方法呢?(run方法就是线程要执行的代码)

        原来每一个线程都有自己的任务代码,比如main线程就执行main方法里面的代码,

        而我们定义的线程,当然要执行自己的任务代码,所以我们就把任务代码写在run方法里面

    3.创建Thread线程的子类对象并调用start方法

      疑问:为什么我们要调用start方法才能开启自定义的线程呢?我并没有定义start方法啊?

        原来,我们用子对象调用start方法,其实是调用Thread类的start方法,并且让start的方法调用run方法

    注意:不要直接调用run方法,如果直接调用run方法,那么就相当于调用了一个普通的方法,并没开启线程

 

下面是一个线程的Demo,可以看出来cpu是在主线程和自定义线程中切换执行的。

class sonThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("我是自定义线程");
        }
    }
}

public class Demo3 {
    public static void main(String[] args) {
        
        sonThread sonthread = new sonThread();
        sonthread.start();
        for (int i = 0; i < 100; i++) {
            System.out.println("我是main线程");
        }
    }
}

 

 

5.线程的生命周期

技术分享图片

 

33. 自定义线程

标签:难题   多个   不同   windows   run   自己的   父类   oid   window   

原文地址:https://www.cnblogs.com/zjdbk/p/8964095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!