java基础之线程

本文围绕Java中的线程展开,介绍了线程概念,对比了多进程与多线程的区别,阐述了线程的三种实现方式、六种状态及转换,还提及停止线程的方法。此外,讲解了线程同步概念,指出Java提供synchronized关键字和juc包工具类来解决线程竞争问题。

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

                                         java基础之线程

线程是java语言中比较重要的一个概念,这篇文章就来写写java中的线程,包含的知识点有点多,包括线程基础、多线程基础、juc包。先总结下java中的线程。

 

 

线程概念:

操作系统中的多任务:一个程序同时执行多个任务。例如在编辑或者下载邮件的同时可以打印文件,但是并发的进程数并不是由CPU数目制约的,操作系统将CPU的时间片分配给每一个进程,给人并行处理的感觉。

多线程程序在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务。通常,每一个任务称为一个线程(thread),它是线程控制的总称。可以同时运行一个以上的程序称为多线程程序。

多进程与多线程的区别:

本质的区别在于每个进程拥有自己的一整套变量,而线程共享数据。

进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。

线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。

线程的实现:

  1. 继承Thread类重写run方法
  2. 实现Runnable重写run方法
  3. 实现Callable<T>接口重写call方法

线程状态与转换

线程有6种状态

  1. 创建(NEW)状态
  2. 就绪(runnable)状态
  3. 运行(running)状态
  4. 阻塞(blocked)状态
  5. 等待(WAITING)状态
  6. 终止(dead)状态

 

线程上下文切换:存储和恢复CPU状态的过程,它使得线程执行能够从中断点恢复执行

Thread的run方法,只会执行同一个线程中的任务,而不会启动新线程,启动新线程应该使用Thread的run方法

停止线程:

  1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止
  2. 使用stop方法强行终止线程,但是不推荐使用这个方法,因为stop和suspend及resume一样,都是作废过期的方法,使用他们可能产生不可预料的结果。
  3. 使用interrupt方法中断线程,但这个不会终止一个正在运行的线程,还需要加入一个判断才可以完成线程的停止。调用interrupted()来判断线程是否被中断

线程同步概念:

在大多数的多线程应用中,两个或者两个以上的线程需要共享对同一个数据的存取,如果两个线程存取相同的对象,并且每个线程都调用了一个修改该对象状态的方法,根据各线程访问数据的次序,可能会产生错误的结果,这个对象通常称为竞争条件,这时候就需要线程的同步来解决竞争。

关于线程的同步,java语言提供了synchronized关键字已经juc包中的一些工具类。

Java5以前有synchronized关键字,Java5之后提供了juc包中的一些工具,包括Lock、Semaphore、CountDownLatch、CyclicBarrier等。

java并发的东西比较多,需要用多篇文章来详细说明,对线程的介绍就先到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值