java中有两种方式进行线程的创建
1. 继承thread类创建线程类
步骤:重写Thread类的run方法,也就是线程执行体;创建Thread的子类,也就是创建线程对象;调用start方法记性启动。
//通过继承Thread类来创建线程类
public class FirstThread extends Thread{
private int i ;
//重写run方法,run方法的方法体就是线程执行体
public void run()
{
for ( ; i < 100 ; i++ )
{
//当线程类继承Thread类时,可以直接调用getName()方法来返回当前线程的名。
//如果想获取当前线程,直接使用this即可
//Thread对象的getName返回当前该线程的名字
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args)
{
for (int i = 0; i < 100; i++)
{
//调用Thread的currentThread方法获取当前线程
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 20)
{
//创建、并启动第一条线程
new FirstThread().start();
//创建、并启动第二条线程
new FirstThread().start();
}
}
}
}
结果是:
Thread-0 53
Thread-1 4
Thread-0 54
main 25
Thread-0 55
Thread-1 5
Thread-0 56
Thread-0 57
可以发现:创建的2个线程是没有共享一个i数据的
2. 实现Runnable接口创建创建线程类
创建步骤:编写实现Runnable接口的实现类;并重写run方法,也就是线程执行体;创建该实现类的实例对象,以此作为Thread的target进行Thread对象的创建,此时的对象才是真正的线程对象
//通过实现Runnable接口来创建线程类
public class SecondThread implements Runnable
{
private int i ;
//run方法同样是线程执行体
public void run()
{
for ( i=0; i < 100 ; i++ )
{
//当线程类实现Runnable接口时,
//如果想获取当前线程,只能用Thread.currentThread()方法。
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main(String[] args)
{
for (int i = 0; i < 100; i++)
{
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 20)
{
SecondThread st = new SecondThread();
//通过new Thread(target , name)方法创建新线程
new Thread(st , "新线程1").start();
new Thread(st , "新线程2").start();
}
}
}
}
结果:新线程1 52
新线程2 51
新线程1 53
main 31
新线程1 55
新线程2 54
新线程1 56
可以发现,两个线程对象是共享一个数据资源的
总结:比较两种方式的区别
Thread方式:已经继承了THread类,所以不能继承其他父类,但是编写简单
Runnable方式:实现了Runnable接口,还可以继承其他类;可以多个线程共享同一份资源;编写相对复杂
而事实上,普遍都使用实现runnable方式去进行多线程应用开发。
分享到:
相关推荐
在Java编程语言中,线程是程序执行的基本单元,它允许程序并发地执行多个任务。在多线程环境中,程序的...在编写`test`这样的示例时,你可以创建并启动线程,测试各种线程控制和同步方法,从而加深对Java线程的理解。
此外,Java中的线程创建方式还包括使用Runnable接口、Thread类、Executor框架等。不同的线程创建方式都有其优缺,需要根据实际情况选择合适的线程创建方式。 本文主要介绍了Java使用Callable和Future创建线程操作的...
学习Java线程,理解其创建、状态转换、调度和控制,以及如何处理线程间的互斥和同步,对于开发高效、稳定的并发程序至关重要。通过深入研究这些概念,开发者能够编写出更符合现代计算需求的高质量软件。
本文将深入探讨Java线程的概念、生命周期、实现方式以及相关的同步机制。 首先,理解线程的基本概念至关重要。线程是程序中一个单一的顺序控制流,它在程序的上下文中运行,但具有独立的执行路径。多线程则是指在...
本文将深入探讨Java多线程中的关键知识点,包括创建线程、主线程、线程优先级、线程组、线程同步以及线程间的通信。 1. **创建线程** 在Java中,可以通过两种方式创建线程:继承`Thread`类或实现`Runnable`接口。...
Java线程状态流转图是一种用于描述Java线程生命周期中不同的状态和状态转换的图形表示方式。该图形展示了Java线程从创建到终止的整个生命周期,并详细介绍了每种状态的特点和转换规则。 NEW(初始化状态) 在Java...
《Java线程(第三版)》是一本深入探讨Java线程技术的专业书籍,旨在帮助开发者理解和掌握Java平台上的多线程编程。Java线程是并发编程的重要组成部分,它允许程序同时执行多个任务,从而充分利用系统资源,提高程序的...
Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的并发性和效率。本教程将深入探讨Java线程的使用,帮助开发者掌握这一关键技术。 一、线程基础 1. **线程的概念**:线程...
Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...
在`main`方法中,你可以创建这个线程类的实例,并调用`start()`方法启动线程: ```java MyThread myThread = new MyThread(); myThread.start(); ``` 这种方式适用于任务与线程类紧密关联的情况,因为线程类...
本文将深入解析Java线程的相关知识点,包括线程的定义、创建、状态管理、线程同步和安全问题。 1. **线程定义** 在Java中,线程是进程中的单一顺序控制流,是程序执行的基本单元。线程在进程的上下文中运行,共享...
### Java线程的创建与启动详解 #### 一、创建线程的方式 在Java中创建线程有两种主要方式:一种是通过继承`java.lang.Thread`类来创建;另一种则是通过实现`java.lang.Runnable`接口。 ##### 1. 继承`Thread`类 ...
下面将详细讲解如何利用Java创建一个TCP服务器,使用线程来监听端口并处理连接。 一、TCP服务器基础 TCP是一种面向连接的、可靠的传输协议,它保证了数据包在传输过程中的顺序和完整性。在Java中,我们可以使用`...
线程池是一种多线程处理形式,它将线程和任务的概念分离开来,能够有效管理线程资源,减少线程创建和销毁的开销,提高程序性能。Java中可以通过Executors类快速创建线程池。 随着Java版本的更新,Java也引入了新的...
Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...
Java线程是Java编程语言中...以上知识点覆盖了Java线程的基础概念、创建方式、状态管理、同步机制以及高级特性,是Java程序员必须掌握的重要内容。通过深入理解和熟练应用这些知识,可以编写出高效、安全的多线程程序。
创建Java线程主要有两种方式: 1. 继承Thread类:创建Thread的子类并重写run()方法,然后通过调用start()方法启动线程。 2. 实现Runnable接口:创建一个实现了Runnable接口的类,实现run()方法,然后将该类的实例...
ExecutorService可以帮助我们管理和控制线程池,减少线程创建和销毁的开销。Future表示异步计算的结果,可以用来检查任务是否完成或者获取结果。Semaphore用于控制同时访问特定资源的线程数量,而CyclicBarrier则...
除了基本的线程创建,Java还提供了synchronized关键字用于线程同步,防止多个线程同时访问共享资源导致数据不一致。synchronized可以修饰方法或代码块,当一个线程正在执行synchronized代码时,其他线程必须等待。 ...
《Java线程实战手册》是Java并发编程领域的一份重要参考资料,主要针对Java开发者,旨在帮助他们深入理解和熟练掌握Java中的多线程技术。虽然这里只提供了第一章的内容,但这一章通常会涵盖基础理论和核心概念,对于...