• 进程和线程


    一、两者的关系

    进程:应用程序的执行实例,有独立的内存空间和系统资源。

    线程:CPU调度和分派的基本单位,进程中执行运算的最小单位,真正在CPU上执行的是线程。

    二、创建线程的两种方式(都需要重写run()方法)

    方法一:继承java.lang.Thread类

    1.创建线程类继承Thread类

    package com.yh.myThread;
    
    public class ThreadDemo extends Thread {
        private int num = 0;
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            System.out.println(num++);
        }
    }

    2.测试类

    package com.yh.myThread;
    
    public class Test {
        public static void main(String[] args) {
            
            ThreadDemo thread = new ThreadDemo();
            thread.start();
    
        }
    }

    运行结果:0

    方法二:是西安java.lang.Runnable接口

    多个线程如果是通过同一个Runable对象构造的,那么会共享Runable对象的资源。

    1.创建线程类实现Runnable接口,并重写run()方法;

    package com.yh.myThread;
    
    public class RunnableDemo implements Runnable {
        private int num = 0;
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            System.out.print(num++);
        }
    }

    2.测试类

    创建两个线程类对象,但是用同一个Runnable类对象

    package com.yh.myThread;
    
    public class Test {
        public static void main(String[] args) {
            RunnableDemo runnable = new RunnableDemo();
            Thread thread1 = new Thread(runnable);
            thread1.start();
            
            Thread thread2 = new Thread(runnable);
            thread2.start();
        }
    }

    运行结果:0 1,注:顺序可能不同

    3.两种方法的区别

    a.通过实现接口的方式可以再继承别的类;

    b.创建对象方式不同,使用实现Runnable接口方法,不同的线程对象使用同一个Runnable对象可以共享数据。

    三、线程的状态

    新生状态、可运行状态、阻塞状态、死亡状态

    四、线程的调度

    1.优先级:反应线程的重要或紧急程度,通过1-10表示,10的优先级最高,默认值是5。

    更改优先级:myThread.setPriority(3);

    2.线程调度的方法

    join():将指定线程加入到当前线程

    代码示例:

    package com.yh.myThread;
    
    public class RunnableDemo implements Runnable {
        private int num = 0;
        ThreadDemo thread = new ThreadDemo();
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            while(num<10) {
                if(num==4) {
                    thread.start();
                    try {
                        thread.join();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                System.out.print(num+++" ");
            }
        }
    }

    运行结果:0 1 2 3 a b c d e 4 5 6 7 8 9 

    Thread.sleep():将当前线程阻塞指定的毫秒数

    Thread.yield():暂停当前正在执行的线程,把执行机会让给相同或更高优先级的线程

    五、线程同步

    当两个或多个线程需要访问同一资源时,需要确保该资源某一时刻只能被一个线程使用。

    通过同步代码块或代码实现,使用关键字synchronized。

  • 相关阅读:
    2016-06-06:X264码率控制
    2016-04-12:图像差异查找算法
    2016-03-24:Windows内存泄露分析工具
    2016-03-15:关于VS中模块定义文件
    2016-03-10:libx265源码解析
    MSSQL字符串取相应的第几个数组值
    MSSQL字符串分割
    list 属性字段直接转成字符串数组
    WebApiTestClient
    获取文件路径
  • 原文地址:https://www.cnblogs.com/YeHuan/p/10779051.html
Copyright © 2020-2023  润新知