thread线程小结

本文总结了线程和进程的区别,介绍了主线程及其特点,并探讨了线程的创建方式,包括Thread、Runnable、Callable接口以及线程池。详细讲解了线程的启动、线程优先级、线程同步以及wait和sleep的区别。此外,还对比了Lock和synchronized,最后分析了线程死锁的概念及避免策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


thread线程小结


线程和进程的区别

1.进程是程序的一次执行过程,是系统运行程序的基本单位。
2.线程是进程的基本单位,一个进程至少包含一个线程。

什么是主线程?有什么特点?

当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程。它的重要性主要体现在两方面:

  • 主线程可以产生新的子线程。
  • 通常主线程最后完成执行操作,因为它要执行各种关闭动作。

线程创建有几种方式

创建线程的主要方式有四种。
1.继承Thread类,重写run()方法。
2.实现Runnable接口,实现run()方法。
3.实现Callable接口,该接口与Runnable的区别在于该方法有返回值,Runnable没有返回值。
4.通过Executor 的工具类创建线程池,最好使用ThreadPoolExecutor创建,以减少资源浪费。

线程如何启动?调用start方法和直接调用run方法有什么区别

线程创建后调用start()方法会启动该线程并进入就绪状态,分配到时间片后就可以开始运行了,然后自动调用run()方法;直接执行run()方法的话,会把run()方法当做main线程下的一个普通方法来执行,而不是作为一个线程。

什么是线程优先级,优先级分为几级?

线程的优先级会告诉程序该线程的重要性有多重,优先级从低到高分为1~10级;并不是优先级越高的线程越先执行,只是增大先执行的概率而已。

什么是线程同步?线程同步会造成什么结果,线程同步使用什么关键字?

1.线程同步是为了防止多个线程并发对同一个资源进行修改,造成数据不一致的情况。
2.使用线程同步,保证了线程的安全,但降低了效率。
3.线程同步使用synchronized关键字。

wait和sleep的区别

1.两者最主要的区别在于:sleep()方法没有释放锁,wait()方法释放了锁。
2.两者都可以暂停线程的执行。
3.wait()方法主要用于线程间的通信,sleep()方法主要用于暂停执行。
4.调用wait()方法后,线程不会自动苏醒,需要别的线程调用同一个对象上的notify()方法或者notifyAll()方法,或者使用wait(long timeout)超时后线程会自动苏醒;sleep()方法执行完后线程会自动苏醒。

Lock的使用

Lock是JUC包下的一个接口,主要用于多线程中无限等待的问题。比如,如果一个代码块被synchronized修饰,那么其他线程想要获取锁就只有等待这段代码块执行完释放锁才能继续获取,而同步代码块释放锁的情况只有两种:

  • 获取锁的线程执行完了该代码块,然后线程释放对锁的占有。
  • 线程执行发生异常,此时JVM会让线程自动释放锁。
    那么如果这个获取锁的线程因为等待IO或者其他原因被阻塞了,又没有释放锁,其他线程就只有无限等待,Lock接口就是为了解决这种问题。

Lock和synchronized的区别

1.Lock是一个接口,synchronized是一个关键字。
2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁。
3.synchronized一般情况下会自动释放锁,Lock需要手动释放锁。
4.多线程中,synchronized代码块如果阻塞,那么其他线程只有无限等待,Lock不会。
5.synchronized锁适合少量代码的同步问题,Lock锁适合大量代码的同步问题。
6.synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可)。

死锁

1.多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源的释放,造成无限期的等待,程序无法继续执行。
2.形成死锁的四个必要条件:

  • 互斥条件:该资源任意一个时刻只能由一个线程占用。
  • 请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源不释放。
  • 不剥夺条件:线程已获得的资源在未使用完之前不能被其他线程强行剥夺,只有自己使用完毕后才能释放资源。
  • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
    3.只要破坏以上四个条件中的一个就能避免线程死锁
  • 破坏互斥条件:这个条件我们无法破坏,因为我们用锁本来就是想让它们互斥。
  • 破坏请求与保持条件:一次性申请所有的资源。
  • 破坏不剥夺条件:占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源。
  • 破坏循环等待条件:靠按顺序申请资源来预防。按某一顺序申请资源,释放资源则反序释放。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值