zoukankan      html  css  js  c++  java
  • JAVA_SE基础——72.自定义线程

     进程 :  正在执行的程序称作为一个进程。  进程负责了内存空间的划分。
     
    问题: windows号称是多任务的操作系统,那么windows是同时运行多个应用程序吗?

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

    从微观角度: cpu是做了一个快速切换执行的动作,由于速度态度,所以我感觉不到在切换 而已。


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


    多线程: 在一个进程中有多个线程同时在执行不同的任务。


    疑问 :线程负责了代码 的执行,我们之前没有学过线程,为什么代码可以执行呢?
    运行任何一个java程序,jvm在运行的时候都会创建一个main线程执行main方法中所有代码。


    一个java应用程序至少有几个线程?
    至少有两个线程, 一个是主线程负责main方法代码的执行,一个是垃圾回收器线程,负责了回收垃圾。


    多线程的好处:
    1. 解决了一个进程能同时执行多个任务的问题。
    2. 提高了资源的利用率。


    多线程 的弊端:
    1. 增加cpu的负担。
    2. 降低了一个进程中线程的执行概率。
    3. 引发了线程安全 问题。
    4. 出现了死锁现象。

    如何创建多线程:

    创建线程的方式:

    方式一:
    1. 自定义一个类继承Thread类。
    2. 重写Thread类的run方法 , 把自定义线程的任务代码写在run方法中
    疑问: 重写run方法的目的是什么?  
      每个线程都有自己的任务代码,jvm创建的主线程的任务代码就是main方法中的所有代码, 自定义线程的任务代码就写在run方法中,自定义线程负责了run方法中代码。
    3. 创建Thread的子类对象,并且调用start方法开启线程。

    注意: 一个线程一旦开启,那么线程就会执行run方法中的代码,run方法千万不能直接调用,直接调用run方法就相当调用了一个普通的方法而已

    并没有开启新的线程。

    public class Demo1 extends Thread {
    	
    	@Override  //把自定义线程的任务代码写在run方法中。
    	public void run() {
    		for(int i  = 0 ; i < 10 ; i++){
    			System.out.println("自定义线程:"+i);
    		}
    	}
    	
    	
    	public static void main(String[] args) {
    		//创建了自定义的线程对象。
    		Demo1 d = new Demo1();
    		//调用start方法启动线程
    		d.start();
    		
    		for(int i  = 0 ; i < 10 ; i++){
    			System.out.println("main线程:"+i);
    		}
    	}
    
    	
    	
    }
    运行结果:

    main线程:0
    main线程:1
    main线程:2
    main线程:3
    main线程:4
    main线程:5
    自定义线程:0
    自定义线程:1
    自定义线程:2
    main线程:6
    自定义线程:3
    自定义线程:4
    自定义线程:5
    自定义线程:6
    自定义线程:7
    main线程:7
    main线程:8
    main线程:9
    自定义线程:8
    自定义线程:9


    看运行结果是不是有种资源抢夺的意思? 这就是多线程的基本原理了

  • 相关阅读:
    在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现
    使用Sublime Text 3进行Markdown 编辑+实时预览
    ni_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法
    CORS跨域的概念与TP5的解决方案
    tp5模型笔记---多对多
    微信小程序 GMT+0800 (中国标准时间) WXSS 文件编译错误
    ESP8266 LUA脚本语言开发: 外设篇-GPIO输入检测
    ESP8266 LUA脚本语言开发: 外设篇-GPIO输出高低电平
    ESP8266 LUA脚本语言开发: 准备工作-LUA文件加载与变量调用
    ESP8266 LUA脚本语言开发: 准备工作-LUA开发说明
  • 原文地址:https://www.cnblogs.com/Jhaiha0/p/8465267.html
Copyright © 2011-2022 走看看