- 线程安全:当多个线程访问同一个类时,这个类始终表现出正确的行为
- synchronized :可在任意方法或对象上加锁
一.extends Thread
package com.zan; public class TestThread extends Thread{ private int count = 5 ; //synchronized加锁 ,实现线程同步 //加锁的这段代码称为:互斥区或临界区 public void run(){ //也可在直接方法上加synchronized synchronized (this) { count--; System.out.println("线程"+currentThread().getName() + " count--> "+ count); } } public static void main(String[] args) { /** * 当多个线程访问TestThread的run方法时,以排队的方式进行处理(这里排对是按照CPU分配的先后顺序而定的), * 一个线程想要执行synchronized修饰的方法里的代码: * 1 首先要获得锁 * 2 若是拿到锁,执行synchronized代码体内容;拿不到锁,这个线程就会不断的尝试获得这把锁,直到拿到为止, * 而且是多个线程同时去竞争这把锁。(也就是会有锁竞争的问题) */ TestThread thread = new TestThread(); Thread t1 = new Thread(thread,"t1"); Thread t2 = new Thread(thread,"t2"); Thread t3 = new Thread(thread,"t3"); Thread t4 = new Thread(thread,"t4"); Thread t5 = new Thread(thread,"t5"); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); } }
二.implements Runnable
package com.zan; public class TestThread2 implements Runnable{ private int count = 5 ; @Override public synchronized void run() { count--; System.out.println("线程"+Thread.currentThread().getName() + " count--> "+ count); } public static void main(String[] args) { TestThread2 thread = new TestThread2(); Thread t1 = new Thread(thread,"t1"); Thread t2 = new Thread(thread,"t2"); Thread t3 = new Thread(thread,"t3"); Thread t4 = new Thread(thread,"t4"); Thread t5 = new Thread(thread,"t5"); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); } }
Runnable比Thread好:1.适合资源共享 2.java只能单继承,但可以实现多个接口。避免继承的局限
相关推荐
### Java中的两种多线程实现方式 在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`...
在Java编程语言中,多线程是并发执行任务的关键机制,尤其在处理计算密集型或I/O密集型任务时。本篇文章将深入探讨如何利用`Thread`类和`Runnable`...在实际应用中,应根据项目需求和最佳实践来选择适合的实现方式。
本文将详细讲解如何通过实现`Runnable`接口创建多线程,以及这种方式相较于继承`Thread`类的优势。 一、实现Runnable接口创建多线程 1. **步骤** 当一个类需要继承其他类而不能直接继承`Thread`类时,可以选择...
### 多线程的Runnable与Thread的区别 在Java中实现多线程有两种主要方式:一种是继承`Thread`类;另一种是实现`Runnable`接口。本文将深入探讨这两种方法的区别,帮助初学者更好地理解并选择适合场景的多线程实现...
Java提供了两种创建线程的方式:继承Thread类和实现Runnable接口。 1. 继承Thread类创建线程: 当你选择继承Thread类时,你需要创建一个新的类,这个类扩展自Thread类。Thread类已经实现了Runnable接口,所以你不...
本篇将探讨两种在Java中实现多线程数据共享的方式:通过内部类和实现`Runnable`接口。 首先,让我们来看看如何使用`Runnable`接口实现数据共享。`Runnable`接口是Java提供的一种创建线程的方式,它允许我们将线程的...
本文将深入探讨如何通过实现`Runnable`接口和继承`Thread`类两种方式来创建线程,并实现在屏幕上随机画正方形的程序。 首先,让我们了解线程的概念。线程是程序中的单一顺序控制流,一个进程可以包含多个线程,它们...
通过深入理解线程的基本概念、生命期、状态转换、调度原则以及实现方式,可以有效地利用多线程来优化应用程序。同时,合理地处理线程间的同步和避免死锁也是构建稳定、可靠的多线程应用的关键。
在Java编程中,创建线程主要有三种方式:继承Thread类、实现Runnable接口以及实现Callable接口。下面我们将逐一探讨这些方式的细节。 **方式一:继承Thread类实现多线程** 这种方式是最直观的创建线程的方法。首先...
有两种主要的方式可以实现多线程:继承`Thread`类和实现`Runnable`接口。这两种方法各有特点,适用于不同的场景。 **继承Thread类** 当一个类直接继承自`Thread`类时,这个类本身就成为一个线程实体。你可以重写`...
在 Java 中,实现多线程有两种方法:继承 Thread 类和实现 Runnable 接口。在本文中,我们将对这两种方法进行详细的介绍和对比。 继承 Thread 类 继承 Thread 类是 Java 中最基本的多线程实现方法。 Thread 类提供...
本文将详细介绍Java中线程的创建与管理,包括两种主要的实现方式:继承`Thread`类和实现`Runnable`接口,并对线程的基本操作方法以及同步和死锁的概念进行深入探讨。 #### 三、Java多线程实现方式 ##### 1. 继承...
本篇将详细讲解Java中实现多线程的两种主要方法:继承Thread类和实现Runnable接口。 ### 继承Thread类 1. **创建子类**:首先,我们需要创建一个新的类,该类继承自Java的`Thread`类。这样,我们的类就拥有了`...
在Java编程语言中,创建多线程有两种主要的方法:继承`Thread`类和实现`Runnable`接口。这两种方法都是为了使程序能够同时执行多个任务,从而提高效率和响应性。 **1. 继承Thread类** 当一个类直接继承自`Thread`类...
在Java中,创建多线程有两种主要的方式:继承`Thread`类和实现`Runnable`接口。这两种方式都是为了实现程序的并发执行,即允许多个任务在同一时间片内交替执行。下面我们将详细讨论这两种方法及其区别。 ### 继承...
本文将深入探讨两种传统的Java线程实现方式,并通过一个具体的例子来阐述如何创建和管理这些线程。 首先,我们来看第一种线程实现方式:继承`Thread`类。当你创建一个新的类继承自`java.lang.Thread`,你可以重写它...
在Java中,实现多线程有四种主要方式:继承Thread类、实现Runnable接口、使用ExecutorService和使用Callable与Future。下面将详细阐述这四种方式。 1. 继承Thread类 当你需要创建一个新的线程类时,可以继承Thread...
在Java中,有两种主要的方法来创建线程:通过继承`Thread`类和实现`Runnable`接口。本篇文章将深入探讨如何使用`Runnable`接口创建线程,并与`Thread`类创建线程的方式进行比较。 首先,我们来看`Runnable`接口。`...
Java提供两种主要方式来创建线程:继承`Thread`类或实现`Runnable`接口。这两种方法都可以让类成为可执行的线程,但它们之间存在一些差异。 1. 继承`Thread`类: 当你创建一个新的类并直接继承`Thread`类时,你可以...
通过上述的介绍和示例代码,可以看出Java多线程编程的方法有继承Thread类和实现Runnable接口两种,各有其适用场景和优势。在实际应用中,可以根据具体需求选择合适的方法来设计和实现多线程程序。