• 多线程学习


    多线程学习

    基础知识

    1、程序、进程、线程

    程序:为了完成某个任务,使用某种特定的语言(Java)所编写的指令(代码)的集合。程序是静态的。

    进程:一个正在运行的程序就可以叫做进程。
    例如:运行中的QQ就是一个进程。
    进程是动态的,程序是静态的。
    进程是资源分配的最小单位,系统在运行时会为每个进程分配不同的内存区域。

    线程:进程中的一个执行路径。一个进程至少有一个线程。如果一个程序同一时间并行执行多个线程,说明该程序是支持多线程的。
    线程是CPU调度的最小单位。线程在进程中有独立的程序计数器(pc)和运行栈。

    2、并行和并发

    并行:多个CPU执行不同的任务。如:多个人同时做不同的事。
    并发:同一个cpu执行多个任务。如:一个人在一个时间段里做多个事。

    线程的创建和使用

    创建方式有两种:继承Thread类、实现Runnable接口。
    (1)继承Thread类
    实现步骤:
    1. 继承Thread类
    2. 重写run()方法
    3. 创建子类的实例
    4. 调用start()方法执行
    代码演示:

    public class ThreadTest {
        public static void main(String[] args) {
            MyThread thread = new MyThread();
            thread.start();
            for (int i = 0; i < 10; i++) {
                System.out.println(i);
            }
        }
    }
    
    class MyThread extends Thread{
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println(i);
            }
        }
    }
    

    在run方法中可以写该线程需要干的事。
    只有调用start()方法才能够启动线程,并且线程只能启动一次,想要再次启动线程需要重新创建一个子类对象。
    在这里有个面试的问题,就是调用run()方法和start()方法的区别?
    答:调用run()方法不会启动线程,相当于只有main方法这个主线程,而调用start()方法才会启动线程。

    (2)实现Runnable接口
    实现步骤:
    1. 实现Runnable接口
    2. 实现接口的run()方法
    3. 创建实现类的对象
    4. 把这个对象当做参数传入Thread类的构造器中,创建Thread的实例。
    5. 通过Thread实例调用start()方法
    代码演示:

    public class ThreadTest2 {
        public static void main(String[] args) {
            MyThread myThread = new MyThread();
            Thread thread = new Thread(myThread);
            thread.start();
        }
    }
    class MyThread implements Runnable{
    
        @Override
        public void run() {
            for (int i = 0; i < 10; i++) {
                System.out.println(i);
            }
        }
    }
    

    两种方式对比:
    使用实现Runnable接口的方式比较好,因为Java中是单继承,如果继承了Thread类,就会有局限性。使用接口就能取消这种局限性。使用接口更适合来处理多个线程有共享数据的情况。

  • 相关阅读:
    keepalived
    设置Suse linux 用户远程登录超时时间
    启用Linux云平台oracle数据库实口令复杂性函数:PASSWORD_VERIFY_FUNCTION=NULL
    将tomcat7解压版注册为windows系统服务
    linux 在后台运行数据库导入导出命令
    suse enterprise Linux 11上配置 oracle11g和tomcat开机自启动
    Linux下的Tomcat JVM 调优
    oracle 11g 常用命令
    如何运行jnlp文件
    查询oracle 数据库 SQL语句执行情况
  • 原文地址:https://www.cnblogs.com/Z-Dey/p/12889180.html
Copyright © 2020-2023  润新知