Java基础篇--多线程

多线程

先打开任务管理器找到进程
在这里插入图片描述
电脑可以同时执行很多应用,让我们有很好的体验,这都是多进程的功劳,让我们可以一边聊着天,一边听着歌,一边下着片儿。下面主要来介绍一下java多线程

进程与线程:

进程是指正在执行的程序,负责该程序的内存空间分配,代表了内存中的执行区域。在传统的操作系统中,进程是资源分配和调度的基本单位。
进程可以看作一连串执行的指令,而一个线程就是指令的一个执行路径。一个进程可以包含多个线程,同一进程中的多个线程共享相同的内存空间。
进程与线程的最大区别在于:进程占有资源,而线程不占有资源。可以将线程理解为轻量级的进程。同一进程中的多个线程护具共享意味着变量的共享,多个线程共同对数据进行操作。

多线程

Java提供了并发机制,在程序中并发执行多个线程,并且每个线程实现不同的功能,这种机制被称为多线程。

主线程
当JVM启动之后,加载类文件,发现main方法,那么就会为main方法创建一个线程,
用于main方法执行,这个为main方法创建的线程称为主线程


线程基本组成部分

cpu时间片:操作系统(os)会为每个线程分配执行时间
运行数据:

  • 堆空间:存储线程需使用的对象,多个线程可以共享堆中的对象
  • 栈空间:存储线程需使用的局部变量,每个线程都拥有独立的栈

线程创建

创建线程的两种方式:

Thread类创建线程

Thread构造方法说明
Thread()创建一个线程对象
Thread(String name)创建一带有制定名称name的线程对象
Thread(Runnable target)创建一个基于Runnable接口实现类的线程对象
Thread(Runnable target,String name)创建一个基于Runnable接口实现类,并具有指定名称name的线程对象
Thread类常用方法说明
public void run()线程相关的代码,一般需要重写
public void start()启动线程的方法
public static void sleep(long m)线程休眠m毫秒
public void join()优先执行调用join()方法的线程
1、继承Thread类创建线程
public class MyThread extends Thread {
    public MyThread(String name){//子类构造方法
        super(name);
        
    }
    public void run() { 
        System.out.println("这是一个线程");
    }
    public static void main(String[] args) {
        MyThread myThread = new MyThread("mythread");//创建线程对象
        myThread.start();//启动线程
    }
}

2、实现Runnable接口创建线程


public class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("正在执行"+Thread.currentThread().getName());

    }

    public static void main(String[] args) {
        MyRunnable obj = new MyRunnable();//创建类myRunnable对象
        Thread thread1 = new Thread(obj,"线程1");//创建Thread对象,将obj作为参数传递给Thread类的构造方法。
        Thread thread2 = new Thread(obj,"线程2");
        Thread thread3 = new Thread(obj,"线程3");
        Thread thread4 = new Thread(obj,"线程4");
        thread1.start();
        thread2.start();//启动线程
        thread3.start();
        thread4.start();
        
    }
}

线程的生命周期:

最 “ 漂亮 ” 的是我自己画的。找了几个对比着来看

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

线程调度

优先度
所有的线程都具有有限度属性。在竞争资源时,一般来说优先度高的线程会优先得到运行。

线程优先度可以通过getPriority()方法取得

Thread thread = new Thread(runnable);
System.out,println(thread.getPriority());
thread,start();

设定优先度
使用setPriority()方法。参数中指定表示优先度的数字,它的最大值(10)和(1)分别用Thread.MAX_PRIORITY定义和Thread.MAX_PRIORITY定义。参数值必须在这个范围内。默认优先度为5。定义为Thread.NORM_PRIORITY。

thread.setPriority(thread,MAX_PRIORITY);
thread.setPriority(2);

注意:
根据优先度的差别分配资源的方法,依赖于操作系统和Java虚拟机的实现,不能保证高优先度的线程一定会优先得到运行权,因此在因运行顺序不同而会引起混乱的情况下,就不能使用设定有限度的方法来进行多线程调度。

线程安全
未完待续。。。

守护线程:运行在后台,为其他前台线程服务
特点:一旦所有用户线程都结束运行,守护线程会随jvm一起结束工作
应用:

  • 数据库连接池中的监测线程
  • jvm虚拟机启动后的监测线程
  • 常见垃圾回收线程
    设置守护线程:
    用户可以使用setDeamon(boolean on) 方法来将线程设置为守护线程,但注意需要在线程启动之前设置,即在start()方法之前调用。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值