线程,主线程 子线程

线程的先后不分

线程是个动态的过程 t1 t2 t3 这三个线程是由主线程执行创造出来的 所以叫子线程

新建 就绪 运行 堵塞

线程有独立的栈

线程中常见的属性:

1 id JVM进程内部分配给唯一的id只能get 不能set thread,getID 就像身份证号 出生就被分配 无法修改

2 name 线程的名字 可以设置

public class Test {
    static class MyThread extends Thread{
        public MyThread(){
            setName("玛卡巴卡");//super(“我是玛卡巴卡”) 构造方法
        }

        @Override
        public void run() {
            System.out.println(this.getName());
        }

        public static void main(String[] args) {
            Thread thread=Thread.currentThread();
            System.out.println(thread.getName());
            MyThread t1=new MyThread();
            t1.start();
            MyThread t2=new MyThread();
            t2.start();
        }
    }
}

线程的状态:新建——就绪——运行——结束  阻塞

理论上和java代码实际上看到的状态

new 新建

runnable 就需+运行

terminated: 结束

blocked+waiting+timed_waiting:阻塞

 java中的枚举enumeration

线程状态只能获取 不能设置 但是我们可以通过代码影响他

线程可以get/set自己的优先级

注意:只是建议 不能强制

前台线程 VS 后台线程    daemon(精灵)后台

前台线程:做交互  例如:1线程响应用户点击(前台)  2 线程去后台下载歌曲(后台)

我们创造出来的线程默认是前台线程 除非修改

sout(t.isDaemon() )  true 为后台

所有前台线程都退出的时候 JVM进程也就退出了 和后台线程 和主线程没关系

总结 线程的场景属性通过Thread对象进行操作

id name 状态 优先级 前/后台线程

Git。。。。

javac.exe java.exe 

jconsole.exe JVM 运行的情况 内存 类加载 线程情况

TimeUnit.SECONDS.sleep(1) 睡眠一秒

A线程:

1创建b线程,并启动b线程

2等待b线程完成所有工作(B线程运行结束)

3打印b线程已经退出了

join  b.join

 从线程的状态的角度 调用sleep就是让当前线程运行——阻塞

Thread.currentThread() 

线程内容总结:如何在代码中创建线程 线程在底层的原理(OS+执行流)

县城结果的随机性  常见属性 相关工具:debug jconsole 

Thread 常见方法sleeo  currentThread()

在没有多线程(执行流)+没有外部输入的情况下 程序的运行其实就是一个状态机

栈维护了一个方法流 

栈:当前执行流的当前时刻(时间停止状态时)的状态框有哪些 现实方法的调用次序

框:栈帧(frame)装的就是运行该方法时需要的一些临时数据(主要就是一些临时变量)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是香橙啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值