Java进阶学习多线程

实现多线程两种方式
1 编写一个类让它继承java.lang.Thread 然后重写run方法(run方法就类似主线程的main方法),
然后创建该类的对象调用.start方法(这个方法是在开辟一个新的栈)。
多线程中每个线程栈不同,堆和方法区共享
在这里插入图片描述
在这里插入图片描述
2 编写一个类让它实现java.lang.Runnable接口,然后实现run方法(建议使用)
在这里插入图片描述

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

线程对象的生命周期
加粗样式
获得当前线程
Thread thread = Thread.currentThread();

获得当前线程的名字
thread.getName();

让该线程睡眠三秒,就是挺3秒运行
Thread.sleep(1000*3);

叫醒沉睡的线程
xxx.interrupt();

线程安全
同步机制
synchronized (共享对象) { 代码块 }

线程死锁,排他锁
public class SiSuo {
public static void main(String[] args) {
Object o1 = new Object();
Object o2 = new Object();
MyThread01 thread01 = new MyThread01(o1,o2);
MyThread02 thread02 = new MyThread02(o1,o2);
thread01.start();
thread02.start(); }}
class MyThread01 extends Thread{
Object o1;
Object o2;
public MyThread01(Object o1,Object o2){
this.o1 = o1;
this.o2 = o2; }
public void run(){
synchronized (o1){
try { Thread.sleep(1000); }
catch (InterruptedException e) {
e.printStackTrace(); }
synchronized (o2){ } } }}

class MyThread02 extends Thread{
Object o1;
Object o2 ;
public MyThread02(Object o1,Object o2){
this.o1 = o1;
this.o2 = o2; }
public void run(){
synchronized (o2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o1){ } } }}
在这里插入图片描述
守护线程
在这里插入图片描述
在这里插入图片描述
设置为守护线程
在启动start()前加xxx.setDaemon(true);

定时器
在这里插入图片描述
wait和notify方法
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值