`
殇瓶-MIN
  • 浏览: 8453 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
社区版块
存档分类
最新评论

初识线程

阅读更多

初识线程

 

每当我们提起线程,可能会将其与进程或者程序的概念混淆,无法区分这三者之间的关系。现在,让我来梳理梳理这三个概念的区别。程序是代码、文件等得集合,是静态的,可以复制到不同的计算机上;进程是执行中的程序,是动态的,无法复制到其他计算机中;线程是进程中的执行单位,同个进程下的线程共用进程中的内存资源。以学校上课为例:程序相当于同一年级的教学安排表,适用于不同的班级;进程相当学校上课,切切实行教学安排表;线程就类似于每一个上课的班,班里的每一个同学,相当于没有具有具体行为的对象。

Java中实现线程有两种方式:通过继承java.lang.Thread类;通过实现java.lang.Runnable接口。

通过继承Thread类实现线程主要是重写run()方法——将执行代码添加到run()方法中。

 

/**
 *  学校类
 * @author Daily
 *
 */
public class School {

	/**
	 *  主进程入口
	 * @param args
	 */
	public static void main(String[] args) {
		Teaching teach1=new Teaching();	// 创建第一个教学线程对象
		Teaching teach2=new Teaching(); // 创建第二个教学线程对象
		teach1.start();					// 调用第一个线程对象的启动方法
		teach2.start();					// 调用第二个线程对象的启动方法
	}

}

/**
 *  自定义一个上课线程类
 * @author Daily
 *
 */
public class Teaching extends java.lang.Thread{
	private int[] a={1,2,3,4,5,6,7};					// 上课班级课程序号
	private java.util.Random ran=new java.util.Random();// 随机数对象,每个班上课时间、上课课程可能不一样
	
	/**
	 *  重写run()方法,将实现代码加入此方法中
	 */
	public void run(){
		for (int i=0;i<7;i++){
			System.out.println(currentThread().getName()+"在上"+a[ran.nextInt(7)]+"号课程");
		}
	}
}

 

通过实现Runnable接口,并通过Thread类创建线程对象。

 

/**
 *  学校类
 * @author Daily
 *
 */
public class School {

	/**
	 *  主进程入口
	 * @param args
	 */
	public static void main(String[] args) {
		Teaching1 teach1=new Teaching1();	// 创建第一个教学线程对象
		Teaching1 teach2=new Teaching1();	// 创建第二个教学线程对象
		/*--------------------这两个对象共同完成一个教学安排--------------*/
		Thread thread1=new Thread(teach1);	// 根据teach1创建第一个线程对象
		Thread thread2=new Thread(teach1);	// 根据teach1创建第二个线程对象
		/*-------------------------------------------------------*/
		
		/*--------------------这个对象自己完成一个教学安排---------------*/
		Thread thread3=new Thread(teach2);	// 根据teach2创建第三个线程对象
		/*------------------------------------------------------*/
		thread1.start();					// 调用第一个线程对象的启动方法
		thread2.start();					// 调用第二个线程对象的启动方法
		thread3.start();					// 调用第三个线程对象的启动方法
	}

}

/**
 *  实现Runnable接口的上课类
 * @author Daily
 *
 */
public class Teaching1 implements java.lang.Runnable{
	private int[] a={1,2,3,4,5,6,7};					// 上课班级课程序号
	private java.util.Random ran=new java.util.Random();// 随机数对象,每个班上课时间、上课课程可能不一样
	
	/**
	 *  重写run()方法,同样将执行代码加入此方法中
	 */
	public void run() {
		for (int i=0;i<7;i++){
			System.out.println(Thread.currentThread().getName()+"在上"+a[ran.nextInt(7)]+"号课程");
		}
	}
	
}

切忌主函数直接调用线程的run()方法。线程类主要是通过start()方法实现了线程方法,如果直接调用我们重写的方法,那么就是Thread类失去了其存在的意义,此时我们任然实现的是单线程——>主线程,而非多线程。

分享到:
评论

相关推荐

    C# 线程相关知识总结

    初识线程 线程是一个独立的运行单元,每个进程内部都有多个线程,每个线程都可以各自同时执行指令。每个线程都有自己独立的栈,但是与进程内的其他线程共享内存。但是对于.NET的客户端程序(Console,WPF,WinForms...

    再读苹果《ThreadingProgrammingGuide》笔记(一):初识线程

    如今关于iOS多线程的文章层出不穷,但我觉得若想更好的领会各个实践者的文章,应该先仔细读读官方的相关文档,打好基础,定会有更好的效果。文章中有对官方文档的翻译,也有自己的理解,官方文档中代码片段的示例在...

    初识通信——多线程服务器的建立

    本文将详细讲解如何初识通信,并以多线程服务器的构建为例,来阐述相关技术点。 首先,理解多线程的概念至关重要。多线程是指在一个进程中可以同时执行多个线程,这样可以充分利用CPU资源,提高程序的执行效率。在...

    头歌初识redis答案.rar

    在头歌平台初识Redis的答案可以总结如下: 一、基础知识 Redis数据库数量: Redis默认有16个数据库,可以使用select命令进行切换。 数据库大小与键的查看: 使用DBSIZE命令查看当前数据库的大小(即键的数量)。 ...

    深海王国小学生都能玩的语音模块?项目工程文件,(7)初识多线程

    使用方法与介绍,请参考系列文章——【深海王国】小学生都能做的语音模块?

    初识Java_课后补充作业

    9. **多线程**:了解线程的创建方式,同步机制(synchronized关键字、wait()、notify()、notifyAll()),以及线程池的使用。 10. **文件与目录操作**:学习如何在Java中创建、读取、修改和删除文件及目录。 11. **...

    java多线程相关面试题 1

    * 创建线程池时,初识化核心线程数和最大线程数 * 当有新的任务提交时,检查是否有空闲线程,如果有,则将任务分配给空闲线程 * 如果没有空闲线程,则检查是否已经达到最大线程数,如果没有,则创建新的线程 * 如果...

    【2018最新最详细】并发多线程教程

    8.初识Lock与AbstractQueuedSynchronizer(AQS) 9.深入理解AbstractQueuedSynchronizer(AQS) 10.彻底理解ReentrantLock 11.深入理解读写锁ReentrantReadWriteLock 12.详解Condition的await和signal等待通知机制 13....

    Java多线程的初识与简单的安全问题解决

    多线程 目录 进程 进程的了解 线程 什么是线程 线程的组成 线程的创建 线程的状态 线程的方法 线程的安全问题 1.进程 1.1.进程的了解 简单的来说进程就是运行中的程序,简称为进程。 单核CPU在任意一个时间节点上,...

    Java线程初识

    1. 进程是什么 windows电脑中,打开任务管理器,可以看到电脑中执行的每一个程序,每一个程序就是一个进程。 Windows系统是一个多任务系统。 电脑可以同时执行多个程序。...线程抢占过程就类似于进

    JAVA语言技术初识

    Java语言技术初识 Java,作为一种革命性的编程语言,由Sun Microsystems公司的James Gosling等人于1991年创立,并于1995年正式发布。它的核心特性是跨平台能力,这得益于Java虚拟机(JVM),使得“编写一次,到处...

    1.初识Java.zip

    【初识Java】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(后被Oracle公司收购)于1995年发布。它的设计目标是具备“简单性、面向对象、健壮性、安全性、可移植性、高效性、多线程和动态性”等...

    头歌初识redis答案

    本篇文章将围绕《头歌初识Redis答案》的内容进行展开,详细介绍Redis的基础知识、数据类型及操作、事务与监视机制、持久化策略以及主从同步等方面的内容。 #### 基础概念 - **内存存储**:Redis主要基于内存进行...

    Maven3之初识

    **Maven3之初识** Maven,一个在Java开发领域广泛应用的项目管理和综合工具,是Apache软件基金会的一个重要项目。它的核心目标是简化构建过程,通过提供一套标准的方式来管理项目的构建、报告和文档。Maven3是Maven...

    头歌初识redis答案.docx

    ### 头歌初识Redis知识点详解 #### 一、Redis基础知识概述 Redis是一种开源的、高性能的键值存储系统,以其快速的数据存取速度而著称。它支持多种数据结构,能够满足不同的应用场景需求。 - **数据库管理**: - ...

Global site tag (gtag.js) - Google Analytics