• 程序,线程,线程


    1. 程序:为完成特定任务而编写的一段指令的集合

    2. 进程:是程序的一次执行过程,或是正在运行的一个程序.是一个动态的过程:它有自身的产生,存在和消亡的过程-----生        命周期,

    3. 线程:进程可以进一步细化为线程,是一个程序内部的一条执行路径,

            一个进程可以支持并行多个线程,此时称之为多线程的

    3.1 多线程的优点:提高用户体验,提高计算机程序的CPU利用率,

    3.2 多线程使用情况:需要同时执行两个或多个任务时

                             程序需要实现一些需要等待的任务时,如用户输入,文件读写,网络操作等

                              需要一些后台运行的程序时

    如何创建多线程:

    1. 方式一,继承Thread类:创建一个继承与Thread类的子类,再使用start()去调用重写后的子类的run方法
    2. Threas中常用的方法:

                start():启动线程,

                sleep():让当前调用此方法的线程睡眠之低昂的毫秒数,

                run():创建的线程真正要执行的操作

       currentThread:获取执行当前代码所在的线程

       yield():主动释放CPU

       join():线程a中调用了线程b的join()方法,此时线程a阻塞,直到线程b执行完成,a线程继续执行

       isAlive():当前线程是否已经执行结束

       stop():停止线程


    //创建一个类继承与Thread类
    class EvenThread extends Thread{
        //重写run方法
        @Override
        public void run() {
           for (int i = 0; i < 100; i++) {
            if (i%2==0) {
                System.out.println(i);
            }
        }
      }
    }
    public class ThreadTest {
    
        public static void main(String[] args) {
            //创建子类对象
            EvenThread e=new EvenThread();
            //调用线程的start()启动,只能通过start启动,否则按顺序执行,不再进入线程子类
            e.start();
                    //调用匿名对象创建的线程的启动
                    t1.start();
    
                    //使用匿名对象创建线程
              Thread t1=new Thread(){
              @Override public void run() { 
               for (int i = 0; i < 100; i++)
                 { if (i%2==0) { 
                System.out.println(i); 
            } 
        }
      }
    }            
    }

     线程优先级的设置:

    如何设置优先级:setPriority():------>例如e1.setPriority(MAX_PRIORITY),      MIN_ PRIORITY =1, NORM_ PRIORITY=5,   MAX_ PRIORITY =10

    如何获取优先级:getPriority()

    注意:高优先级的线程会抢占低优先级的线程,但是不意味着高优先级的一定先执行完成    

    方式二:使用runable接口创建线程:创建runable的实现类,实现该接口,重写run方法

    package threadtest;
    
    public class Ruanble {
        
        public static void main(String[] args) {
            //创建实现类的对象
            Num num=new Num();
            //将此对象作为参数传递给Thread类的构造器,创建Thread类的对象
            Thread thread =new Thread(num);
            //调用start()启动创建的Thread对象
            thread.start();
            thread.setName("线程一");
            
        }
    }
    //创建一个类实现Runable接口
    class Num implements Runnable{
        
        //重写run方法
        @Override
        public void run() {
            for (int i = 0; i <100; i++) {
                if (i%2==0) {
                    System.out.println(Thread.currentThread().getName()+"de素数wei:"+i);
                }
            }
        }
    }

    比较实现Runable 和继承Thread的优劣:  对比后Runable要好于继承Thread

        原因:

    1. 实现方式,解决单继承的局限性
    2. 实现的方式针对于有共享数据的情况,操作起来跟方便
    3. 实现的凡是可以做到数据和代码的分离

    方式三:使用callable创建多线程

        如何理解实现Callable接口的方式创建多线程比实现Runable接口创建线程方式强大

    1. Callable重写或实现的方法可以有返回值
    2. 重写或实现的方法可以抛出异常
    3. 使用Callable是可以使用泛型,并指明call()的返回值类型
    4. 与Runable扥不同是,他重写的是call()方法

    方式四:使用线程池创建多线程(类似与数据库连接池)

    提高响应速度(减少创建新线程的时间)

    减低资源消耗(重复利用线程池中线程,不需要每次都创建)

    便于线程管理:--------->>>>

      corePoolSize:核心池的大小

      maximumPoolSize:最大线程数

      keepAliveTime:线程没有任务是最多保持多长时间会终止

  • 相关阅读:
    linux实践——内核编程 基础模块
    linux内核分析 课程总结
    linux内核分析 期中总结
    linux内核分析 第八周
    linux内核分析 第4章读书笔记
    linux内核分析 第七周
    2020JAVA面试题
    springboot redis工具类
    mysql关于时间函数的应用
    jetty的web部署
  • 原文地址:https://www.cnblogs.com/ylblikestudyJava/p/12374904.html
Copyright © 2020-2023  润新知