Java 线程

创建线程的方法
继承thread类

继承Thread类并重写run方法

public class TestThread extends Thread {
    @Override
    public void run() {
        super.run();
        System.out.println("执行Thread.run");
    }
}

调用继承Thread类的start方法启动线程

TestThread thread = new TestThread();
thread.start();

运行结果

执行Thread.run

Process finished with exit code 0
实现Runnable接口

实现接口并重写run方法

public class TestRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("执行Runnable中的run方法");
    }
}

启动线程

Thread thread = new Thread(new TestRunnable());
thread.start();

运行结果

执行Runnable中的run方法

Process finished with exit code 0

可以在new Thread时传入一个string用来标记线程

Thread thread = new Thread(new TestRunnable(), "t-1");

在run方法中使用以下方法获取

Thread.currentThread().getName();
继承方式和实现接口方式的异同

相同

  • 都需要Thread类启动run、start方法

区别

  • 继承Thread:线程代码存放Thread子类run方法中
  • 实现Runnable接口:线程代码存在接口的子类的run方法中

使用实现Runnable接口的好处

  • 避免了单线程的局限性
  • 多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份资源。
多线程的优点
  • 提高应用程序的响应。对图形化界面更有意义,可增强用户体验。
  • 提高计算机系统CPU的利用率。
  • 改善程序结构。将即长又复杂的进程分为多个线程,独立运行,利于理解和修改。
Thread类的相关方法
run();//线程在就绪状态进入运行状态时执行的方法
void start();//启动线程,使线程进入就绪状态
String getName();//返回线程的名称
void setName(String name);//设置线程的名称
static currentThread();//返回当前线程
/**
 * 线程让步
 * 暂停当前正在执行的线程,把执行机会让给优先级相同或者更高的线程
 * 若队列中没有同优先级的线程,忽略此方法
 */
static void yield();
/**
 * 当某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,知道join方法加入的线程执行完为止
 * 低优先级的进程也可以获得执行
 */
join();
 /**
  * 令当前活动线程在指定的时间段内放弃对cpu的控制,使其他线程有机会被执行,时间到后重排队
  * 抛出InterruptedException异常
  */
 static void sleep(long millis);
 stop();//强制线程生命周期结束
 boolean isAlive();//返回boolean,判断线程是否还活着
线程的优先级
  • 线程有多大的概率会被执行

  • 优先级使用1-10表示,数字越大优先级越高,默认优先级为5。

  • MAX_PRIORITY 10

  • MIN_PRIORITY 1

  • NORM_PRIORITY 5

相关方法

getPriority();//返回线程优先级
setPriority(int newPriority);//修改线程的优先级
  • 注:线程创建时继承父线程的优先级
  • 优先级只能增大被执行的概率,并不是绝对的
线程的生命周期

在这里插入图片描述

线程同步
  • 多个线程执行的不确定性会引起执行结果的不稳定
  • 多个线程对账本的共享,会造成操作的不完整性,会破坏数据

使用synchronized同步

//在方法上声明
public synchronized void show(String name){
    //thing
}

synchronized(对象){
    //需要同步的代码
}

线程的死锁

  • 不同的线程分别占用对方需要的同步资源不放手,都在等待对方自己需要的同步资源,就形成了线程的死锁。

解决办法

  • 专门的算法、原则,比如加锁顺序一致
  • 尽量减少同步资源的定义,尽量避免锁未释放的场景
线程的通信
wait();//林当前线程挂起,同步资源,使别的线程可访问并修改共享资源
notify();//唤醒正在排队等待铜鼓资源的线程中优先级最高者
notifyAll();//唤醒正在排队等待资源的所有线程结束等待
  • 注:这三个方法只有在synchronized方法或者代码块中才可以使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陌尘吖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值