zoukankan      html  css  js  c++  java
  • 33. 自定义线程

    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.线程的生命周期

  • 相关阅读:
    schema文件中cube的事实表使用视图方法
    Saiku国际化总结
    saiku安装方法总结
    MySQL中的datetime与timestamp比较(转载)
    js中的刷新方法
    如何用 Node.js 和 Elasticsearch 构建搜索引擎
    Win7搭建NodeJs开发环境以及HelloWorld展示—图解
    NodeJS开发环境搭建
    从零开始nodejs系列文章
    windows 下安装nodejs及其配置环境
  • 原文地址:https://www.cnblogs.com/zjdbk/p/8964095.html
Copyright © 2011-2022 走看看