`
殇瓶-MIN
  • 浏览: 8644 次
  • 性别: 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在任意一个时间节点上,...

    python入门课程 步骤一:Python基础知识 步骤二:Python函数与模块 步骤三:初识面向对象 步骤四:正则表达式与综合实战 步骤五:内存管理与多线程

    步骤三让学生初识面向对象编程,这是一个编程范式,它利用对象和类的概念来设计软件。在这个阶段,学生将学会如何创建类,如何使用继承、封装和多态性等面向对象的原则来组织代码,从而提高代码的可读性和可维护性。...

    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主要基于内存进行...

    Gatling初识.pdf

    标题“Gatling初识.pdf”表明这是一个关于Gatling框架的基础入门指南,而描述中提到的“参数化用于性能测试脚本编写”则指出了Gatling在参数化方面的应用。参数化是性能测试中的一个关键概念,它允许测试脚本使用...

    Maven3之初识

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

Global site tag (gtag.js) - Google Analytics