Java线程总结

简介:

什么是进程,什么是线程?

简而言之,进程可以看成正在运行的程序的实例。而线程可以看成进程里面的一条执行路径。

每个进程都有独立代码和数据空间(进程上下文),同一个进程中可以共享程序的内存和数据。所以线程之间切换代价小,进程之间切换代价大。

多进程在操作系统中能同时运行多个任务(程序)

多线程在同一进程有多个并发任务在执行

线程的创建有两种方式。

方式一:实现Rannable接口,重写run方法。这种方法,还需要使用Thread类,来对Runnable子类的实例进行封装,调用Thead类中的start方法才能启动。

方式二:继承Thread类,重写run方法,调用start()使该线程处于"可执行/可运行"状态,等待虚拟机来调度

启动线程时,创建的实例不能直接调用,重写的run方法,否则不是启动多线程。而是调用start方法。

run方法称为线程体方法,线程被CPU调度时,自动执行,同一个线程对象只能调用一次start方法。无论线程是否结束,Runnable接口可以为一个线程的多个实例共享数据。

方法:

long getId():返回该线程的标识符。

String getName():返回该线程的名称。

void interrupt():中断线程。

boolean isAlive():测试线程是否处于活动状态。

boolean isDaemon():测试该线程是否为守护线程。

booleanisInterrupted():测试线程是否已经中断。

void setDaemon(booleanon):将该线程标记为守护线程或用户线程。

voidsetName(String name):改变线程名称,使之与参数 name 相同。

static voidsleep(long millis):在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。

void start():使该线程开始执行;Java 虚拟机调用该线程的 run 方法。

static voidyield():暂停当前正在执行的线程对象,并执行其他线程。

以下的三个方法定义在Object类中,而不是Thread类中。

final void  notifyAll():将所有的线程唤醒,进入就绪状态。

final void  notify():唤醒一个线程,使其进入就绪状态。

final void  wait():使线程等待,阻塞状态。


中断线程的两种方法:

方法一:在线程类中设置一个标志位,通过在其他线程(例如主线程)中修改该标志位的值,来达到停止线程的目的.一般在子线程的run()的循环中需要加上退出条件if(flag){....break;}

方法二:线程对象调用interrupt()方法。

(1)要被中断的线程阻塞在sleep()/wait()/join(),会引发一个      InterruptedException,需要在catch语句中进行处理;

(2)不是上述情况下,可以用Thread.interrupted()来获取是否中断的状态,如果是被中断了,break出来,不再执行后续语句;注意:该方法调用后,会清除"中断标志",下次再调用时,将得到false

线程的调度:

      线程睡眠:Thread.sleep(longmillis) throws InterruptedException 方法,使线程转到阻塞状态。millis参数设定睡眠的时间,以毫秒为单位。当睡眠结束后,就转为就绪(Runnable)状态。

线程让步:Thread.yield() 方法,暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程。

线程加入:join() throwsInterruptedException 方法 在当前线程中调用另一个线程的 join()方法,则当前线程转入WAITING状态,直到另一个线程运行结束,当前线程再由阻塞转为就绪状态。

线程等待:Object 类中的wait() throws InterruptedException 方法,导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 唤醒方法。

线程唤醒:Object 类中的notify()方法,唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的。Object类中的notifyAll()方法,唤醒在此对象监视器上等待的所有线程。

线程的状态转换:线程共有创建状态,就绪状态,运行状态,阻塞状态,死亡状态。

创建状态,在产生线程的对象,还没有调用start方法之前的状态。调用start方法后,就进入了就绪状态,等待jvm的调度。一旦jvm调度了线程,就使线程进入了运行状态。如果运行着的线程,被暂停,就进入了阻塞状态。如果线程的run方法执行结束或者线程调用了stop方法,则线程就会死亡。

线程的优先级。最高级为10,最小为1,默认为5。线程的优先级设置,并不一定优先级高的就一定先执行,而是先执行的概率大。所以优先级高的,线程先执行这句话是错的。

使用setPriority()和getPriority()方法分别用来设置和获取线程的优先级。

一般情况下不需要手动设置线程的优先级,而是用默认的优先级就好。



本文转自 墨宇hz 51CTO博客,原文链接:http://blog.51cto.com/zzhhz/1626187

相关文章
|
10天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
10天前
|
安全 Java 开发者
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第9天】本文将深入探讨Java并发编程的核心概念,包括线程安全和性能优化。我们将详细解析Java中的同步机制,包括synchronized关键字、Lock接口以及并发集合等,并探讨它们如何影响程序的性能。此外,我们还将讨论Java内存模型,以及它如何影响并发程序的行为。最后,我们将提供一些实用的并发编程技巧和最佳实践,帮助开发者编写出既线程安全又高效的Java程序。
22 3
|
10天前
|
算法 Java 开发者
Java中的多线程编程:概念、实现与性能优化
【4月更文挑战第9天】在Java编程中,多线程是一种强大的工具,它允许开发者创建并发执行的程序,提高系统的响应性和吞吐量。本文将深入探讨Java多线程的核心概念,包括线程的生命周期、线程同步机制以及线程池的使用。接着,我们将展示如何通过继承Thread类和实现Runnable接口来创建线程,并讨论各自的优缺点。此外,文章还将介绍高级主题,如死锁的预防、避免和检测,以及如何使用并发集合和原子变量来提高多线程程序的性能和安全性。最后,我们将提供一些实用的性能优化技巧,帮助开发者编写出更高效、更稳定的多线程应用程序。
|
8天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第11天】 在Java中,高效的并发编程是提升应用性能和响应能力的关键。本文将探讨Java并发的核心概念,包括线程安全、锁机制、线程池以及并发集合等,同时提供实用的编程技巧和最佳实践,帮助开发者在保证线程安全的前提下,优化程序性能。我们将通过分析常见的并发问题,如竞态条件、死锁,以及如何利用现代Java并发工具来避免这些问题,从而构建更加健壮和高效的多线程应用程序。
|
1天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)
|
1天前
|
安全 Java 调度
Java并发编程:深入理解线程与锁
【4月更文挑战第18天】本文探讨了Java中的线程和锁机制,包括线程的创建(通过Thread类、Runnable接口或Callable/Future)及其生命周期。Java提供多种锁机制,如`synchronized`关键字、ReentrantLock和ReadWriteLock,以确保并发访问共享资源的安全。此外,文章还介绍了高级并发工具,如Semaphore(控制并发线程数)、CountDownLatch(线程间等待)和CyclicBarrier(同步多个线程)。掌握这些知识对于编写高效、正确的并发程序至关重要。
|
1天前
|
安全 Java 程序员
Java中的多线程并发编程实践
【4月更文挑战第18天】在现代软件开发中,为了提高程序性能和响应速度,经常需要利用多线程技术来实现并发执行。本文将深入探讨Java语言中的多线程机制,包括线程的创建、启动、同步以及线程池的使用等关键技术点。我们将通过具体代码实例,分析多线程编程的优势与挑战,并提出一系列优化策略来确保多线程环境下的程序稳定性和性能。
|
2天前
|
缓存 分布式计算 监控
Java并发编程:深入理解线程池
【4月更文挑战第17天】在Java并发编程中,线程池是一种非常重要的技术,它可以有效地管理和控制线程的执行,提高系统的性能和稳定性。本文将深入探讨Java线程池的工作原理,使用方法以及在实际开发中的应用场景,帮助读者更好地理解和使用Java线程池。
|
2天前
|
存储 安全 Java
Java中的容器,线程安全和线程不安全
Java中的容器,线程安全和线程不安全
10 1
|
2天前
|
Java 开发者
Java中多线程并发控制的实现与优化
【4月更文挑战第17天】 在现代软件开发中,多线程编程已成为提升应用性能和响应能力的关键手段。特别是在Java语言中,由于其平台无关性和强大的运行时环境,多线程技术的应用尤为广泛。本文将深入探讨Java多线程的并发控制机制,包括基本的同步方法、死锁问题以及高级并发工具如java.util.concurrent包的使用。通过分析多线程环境下的竞态条件、资源争夺和线程协调问题,我们提出了一系列实现和优化策略,旨在帮助开发者构建更加健壮、高效的多线程应用。
3 0