JAVAEE---多线程

内核

内核时操作系统的核心

操作系统有内核态和用户态,像我们平时所用到的qq音乐,微信等都属于用户态执行的程序。那么qq音乐播放音乐需要用到扬声器,扬声器的操作就是在内核空间进行操作,用户态不能对其进行操作。

操作系统 = 内核+配套的应用程序

当我们运行代码的时候发现Thread和main同时打印,这就是两个线程并发执行,在上面的工具中我们也看到了main,Thread-0这俩个线程,其他一些线程都是自带的,用来完成内存回收啊,一些操作我们不用过多理解。

这里调度时随机的,没有先后顺序,这是由于我们时抢占式执行,即开始执行时间和结束执行时间都随机。但一般在这个代码中,main应该更快一步。因为当我们创建t线程的时侯,主线程继续向下执行,我们说这两个线程在一个进程中,但是创建线程虽然不要开辟空间,但是也不是完全没有消耗,他要建立自己的pcd。所以第一次执行被main抢占先机。

当我们点开的时候会发现一个堆栈跟踪,这就是代码执行到哪里,这是对其的一个快照,即这次点击和下次点击结果可能有所不同。

线程创建的几种方式

继承Thread 重写run方法

实现Runnable接口,重写run方法

继承Thread,重写run,但使用匿名内部类

实现Runnable接口,重写run方法,使用匿名内部类

但是上面四种都不太常用,一般使用lambda表达式

Thread其他方法

Thread()

Thread(Rannable b)

Thread(String name)

Thread(Rannable b String name)

这里的name就是线程名,默认就是上面的Thread-0

Thread常见属性

getId()

身份标识

getName()

就是上面说的name

getState()

状态,就绪/阻塞

getPriority()

优先级

getDaemon()

是否为后台线程,这里默认为前台线程。这里的前台后台和手机app前后台不同,前台线程会阻止进程结束,后台线程不会阻止进程结束。也就是说只要前台线程全部执行完毕,整个进程都会结束

默认是前台线程,传入true为后台线程。

isAlive()

是否存活,表示pcd是否存在。

这里对象实例的生命周期,和内核pcd周期是不同的,当Thread t = new Thread();这时t就已经存在,但是内核中pcd还没有存在t.start才真正创建了

第一个打印为false,但t已经实例过了,第二次为true因为线程没有结束,第三次为false但t仍然没有被释放,不过其线程已经结束。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不是懒大王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值