多线程内容

多线程内容,第1张

线程内容 多线程 什么是进程?什么是线程?

进程是一个应用程序。(一个进程是一个软件)

线程是一个进程中的执行场景/执行单元

一个进程可以启动多个线程

进程和线程是什么关系

进程A和进程B的内存独立不共享

线程A和线程B(在java语言中):

​ 线程A和线程B,堆内存和方法区内存共享

​ 但是栈内存独立,一个线程一个栈

​ 假设启动10个线程,会有10个栈空间,每个栈之间互不干扰,各自执行各自的,这就是多线程并发

​ java中之所以有多线程机制,目的就是为了提高程序的处理效率

思考一个问题:
使用多线程机制之后,main方法结束,是不是有可能程序也不会结束?
答:main方法结束只是主线程结束了,主栈空了,其他的栈(线程)可能还在压栈d栈

对于单核的CPU来讲,真的可以做到真正的多线程并发吗?

对于多核的CPU电脑来说,真正的多线程并发是没问题的。

四核CPU表示同一个时间点上,可以真正的有4个进程并发执行

什么是真正的多线程并发?

t1线程执行t1的。

t2线程执行t2的。

t1不会影响t2,t2也不会影响t1.这才叫真正的多线程并发。

单核的CPU表示只有一个大脑:

不能够做到真正的多线程并发,但是可以做到给人一种“多线程并发的感觉。

对于单核的CPU来说,在某一个时间点上实际只能处理一件事情,但是由于CPU的处理速度极快,多个线程之间频繁切换执行,给人的感觉是:多个事情同时在做

java语言中,实现线程有三种方式,先来看一下前两种

java支持多线程机制。并且java将多线程实现了,我们只需要继承就行了。

第一种方式:

编写一个类,直接继承java.lang.Thread,重写run方法

package com.bjpowernode.thread;

public class ThreadTest02 {
    public static void main(String[] args) {
        //这里是main方法,这里的代码属于主线程,在主栈中运行
        //新建一个分支线程对象
        MyThread t = new MyThread();
        //启动线程
        //t.run();
        // 直接调用run方法和调用start方法的区别是什么?
        //直接调用run方法不会启动线程,不会分配新的分支栈(这种方式就是单线程)
        //start()方法的作用是:启动一个分支线程,在JVM中开辟一个新的栈空间,这段代码任务完成之后瞬间就结束了
        //这段代码的任务只是为了开启一个新的栈空间,只要新的栈开出来,start()方法就结束了。线程就启动成功了。
        //启动成功的线程会自动调用run()方法,并且run方法在分支栈的栈底部(压栈)
        //run方法在分支栈的栈底部,main方法在主栈的栈底部。run和main是平级的。
        t.start();
        //这里的代码还是运行在主线程中
        for (int i = 0; i < 1000; i++) {
            System.out.println("主线程--->"+i);
        }
    }
}
class MyThread extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("分支线程--->" + i);

        }
    }
}

线程的start:


线程的run:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5693345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存