`

java多线程(二)线程的实现及生命周期

阅读更多
在java中通过run方法为线程指明要完成的任务,有两种技术来为线程提供run方法;
1,继承Thread类并重写run()方法。之后创建这个子类的对象并调用start()方法。
2,通过定义实现Runnable接口的类进而实现run方法。这个类的对象在创建Thread的时候作为参数被传入。然后调用start()方法。
Thread类是专门用来创建线程和对线程进行操作的类。当某个类继承了Thread类后,该类就叫做线程类。

两种方法均需执行线程的start()方法为线程分配必须得系统资源、调度线程运行并执行run()方法。一个线程只能启动一次,再次启动就不合法了。
public class ThreadTest1{
	@Test
	public void test(){
		Thread1 t1 = new Thread1();
		Thread2 t2 = new Thread2();
		t1.start();
		t2.start();
	}
	@Test
	public void test2(){
		Thread thread1 = new Thread(new MyThread1());
		Thread thread2 = new Thread(new MyThread2());
		thread1.start();
		thread2.start();
	}
	class Thread1 extends Thread{
		public void run(){
			for (int i = 0; i < 100; ++i)
			{
				System.out.println("Hello World: " + i);
			}
		}
	}
	class Thread2 extends Thread{
		public void run()
		{

			for (int i = 0; i < 100; ++i)
			{
				System.out.println("Welcome: " + i);
			}
		}
	}
	class MyThread1 implements Runnable{
		@Override
		public void run() {
			for (int i = 0; i < 100; ++i)
			{
				System.out.println("Hello: " + i);
			}

		}
	}
	class MyThread2 implements Runnable{

		@Override
		public void run() {
			for (int i = 0; i < 100; ++i)
			{
				System.out.println("Welcome: " + i);
			}

		}

	}
}


3,停止线程,停止线程推荐的方式:设定一个标志变量,在run()方法中是一个循环,由该标志变量控制循环式继续执行还是跳出;循环跳出,则线程结束。
public class ControlThreadTest {
	MyThreadClass r = new MyThreadClass();
	Thread t = new Thread(r);

	@SuppressWarnings("static-access")
	@Test
	public void test(){
		this.startThread();
		try {
			t.sleep(10000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		this.stopThread();
	}

	public void startThread(){
		t.start();
	}
	public void stopThread(){
		r.stopRunning();
	}
	class MyThreadClass implements Runnable{
		private boolean flag = true;
		@Override
		public void run() {
			while(flag){
				System.out.println("Do Something ..");
			}
		}
		public void stopRunning(){
			flag = false;
		}
	}
}


线程的生命周期是指一个线程从创建到消亡的过程。线程生命周期的各个状态如下如所示:



1,创建状态:
当用new操作符创建一个新的线程对象时,该线程处于创建状态。处于创建状态的线程只是一个空的线程对象,系统不为它分配资源。
2,可运行状态:
执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体—-run()方法这,样就得该线程处于可运行状态(Runnable)。这一状态并不是运行中状态(Running),因为线程也许实际上并未真正运行。
3,不可运行状态:
当发生了下列事件时,处于运行状态的线程会转入到不可运行状态:
调用了sleep()方法:
线程调用了wait()方法等待特定条件的满足;
线程输入/输出阻塞。
返回可运行状态:
处于睡眠状态的线程在指定的事件过去后;
如果线程在等待某一条件,另一个对象必须通过notify()或notifyAll()方法通知等待线程
条件的改变。
如果线程是因为输入输出阻塞,等待输入输出完成。
4,消亡状态:
当线程的run()方法执行结束后,该线程自然消亡。
线程的优先级
1,线程的优先级及设置
线程的优先级是为了在多线程环境中便于系统对线程的调度,优先级高的线程将优先执行。一个线程的优先级设置遵循以下原则:
线程创建时,子继承父的优先级。
线程创建后,可通过调用setPriority()方法改变优先级。
线程的优先级是1-10之间的正整数。
1-MIN_PRIORITY
5-NORM_PRIORITY
10-MAX_PRIORITY
如果什么都没有设置,默认值是5,但是不能靠线程的优先级决定线程的执行顺序。
2.线程的调度策略
线程调度器选择优先级最高的线程运行。但是,如果发生以下情况,就会终止线程的运行:
线程中调用了yield()方法,让出了对CPU的占用权。
线程中调用了sleep()方法,是线程进入睡眠状态。
线程由于I/O操作而受阻塞。
另一个更高优先级的线程出现。
在支持时间片的系统中,该线程的时间片用完。

参考资料:
圣思园张龙老师Java SE系列视频教程。
  • 大小: 365.6 KB
分享到:
评论

相关推荐

    Java多线程知识点总结

    总之,掌握Java多线程的生命周期、创建、启动、同步以及线程池的使用是编写高效、稳定并发程序的基础。理解这些知识点对于解决并发编程中的问题,比如资源竞争、死锁、线程安全性等问题,至关重要。在实际开发中,...

    java线程生命周期详细讲解

    Java多线程生命周期的讲解,很详细,希望能帮到大家

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    JAVA多线程练习题答案。

    JAVA多线程练习题答案详解 在本文中,我们将对 JAVA 多线程练习题的答案进行详细的解释和分析。这些题目涵盖了 JAVA 多线程编程的基本概念和技术,包括线程的生命周期、线程同步、线程状态、线程优先级、线程安全等...

    java多线程应用实现示例

    总结,这个"java多线程应用实现示例"通过小球运动的模拟,深入浅出地展示了Java多线程的运用,包括线程创建、同步、通信和线程池管理等关键概念。学习这个示例有助于理解和掌握Java多线程编程,为实际项目开发中的...

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制是Java编程中至关重要的一部分,它允许程序同时执行多个任务,提升应用程序的效率和响应性。以下是对各个知识点的详细说明: 9.1 Java中的线程: Java程序中的线程是在操作系统级别的线程基础上进行...

    Java多线程(二)、线程的生命周期和状态控制

    ### Java多线程之线程的生命周期和状态控制 #### 一、线程的生命周期 在Java中,线程的生命周期是指线程从创建到结束的整个过程。根据线程的状态变化,我们可以将线程的生命周期划分为以下几个阶段: 1. **新建...

    汪文君JAVA多线程编程实战(完整不加密)

    书中详细介绍了Java多线程的核心概念,如线程的创建、启动、同步、协作以及生命周期管理。读者将学习如何通过实现Runnable接口或继承Thread类来创建线程,以及如何使用Executor框架来管理线程池。 此外,书中还深入...

    Java多线程编程核心技术_完整版_java_

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...

    JAVA多线程编程技术PDF

    Java还提供了一些线程池的API,如ExecutorService和ThreadPoolExecutor,它们帮助管理线程生命周期,提高性能并减少资源消耗。通过设置线程池参数,可以定制线程的创建、复用和销毁策略,以适应不同场景的需求。 ...

    java 多线程编程实战指南(核心 + 设计模式 完整版)

    《Java多线程编程实战指南》这本书深入浅出地讲解了Java多线程的核心概念和实战技巧,分为核心篇和设计模式篇,旨在帮助开发者掌握并应用多线程技术。 1. **线程基础** - **线程的创建**:Java提供了两种创建线程...

    java多线程,对多线程,线程池进行封装,方便使用

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,我们可以通过实现Runnable接口或继承Thread类来创建线程。然而,直接使用线程可能存在一些问题,如资源管理...

    Java多线程编程

    Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类和并发工具来实现,接下来我们将深入探讨这些关键知识点。 1. **...

    java 多线程示例

    Java多线程是Java编程中的重要概念,尤其在开发高性能、高并发的应用中不可或缺。本示例旨在为初学者提供一个全面理解Java多线程的起点。通过学习这个实例,你可以掌握如何创建和管理线程,理解线程同步与通信的重要...

    Java多线程编程实战指南-核心篇

    《Java多线程编程实战指南-核心篇》是一本深入探讨Java并发编程的书籍,旨在帮助读者掌握在Java环境中创建、管理和同步线程的核心技术。Java的多线程能力是其强大之处,使得开发者能够在同一时间执行多个任务,提高...

    java多线程示例

    在Java编程语言中,多...通过以上知识点,我们可以更好地理解和运用Java多线程,实现高效、稳定的并发程序。文档“java多线程实例.docx”可能包含具体的示例代码和详细解释,建议参考学习,以加深对Java多线程的理解。

    java多线程.pdf

    ### Java多线程知识点详解 #### 一、Java多线程概述 **Java多线程**是指在Java程序中能够同时执行多个线程的技术。这种技术使得程序可以在多个任务之间并发执行,从而提高了程序的效率和资源利用率。本文将根据...

    java多线程课件

    总结来说,Java多线程技术是实现并发和优化程序性能的重要手段,理解线程的生命周期、创建方式、同步机制以及异常处理,是成为一名合格的Java开发者的必备技能。通过合理地设计和使用多线程,开发者可以构建出高效、...

    java多线程详解(比较详细的阐述了多线程机制)

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,从而提升系统效率和资源利用率。本文将深入探讨Java多线程机制,包括线程的创建、同步、通信以及常见设计模式。 首先,Java中创建线程主要有两种...

Global site tag (gtag.js) - Google Analytics