`
殇瓶-MIN
  • 浏览: 7944 次
  • 性别: 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多线程的文章层出不穷,但我觉得若想更好的领会各个实践者的文章,应该先仔细读读官方的相关文档,打好基础,定会有更好的效果。文章中有对官方文档的翻译,也有自己的理解,官方文档中代码片段的示例在...

    线程介绍(一)

    初识线程,循序渐进,是一种重要的技术支持,对大家入门有帮助

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

    NULL 博文链接:https://coco-young.iteye.com/blog/1150719

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

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

    在BCB中使用多线程 ( 转载 )_BladeW的博客-CSDN博客1

    一、初识TThread对象VCL提供了用于多线程编程的TThread类,在这个类中封装了Windows关于线程机制的Windows API,通常将它的实例成为线

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

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

    三歪教你学多线程1

    前言一、什么是多线程一、初识多线程1.1介绍进程1.2回到线程1.3进程与线程1.4并行与并发1.5Java实现多线程1.5.1继承Thread,重写run方法

    Java线程初识

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

    蘑菇街Java大牛纯手打肛出的一份多线程文档,请别丢进收藏夹吃灰

    1.初识多线程 1.1介绍进程 1.2回到线程 1.3进程与线程 1.4并行与并发 1.5Java实现多线程 1.5.1继承Thread,重写run方法 1.5.2实现Runnable接口,重写run方法 1.6Java实现多线程需要注意的细节 二、Thread类...

    java并发编程面试题

    ## Lock简介与初识AQS ### Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势? ReentrantLock(重入锁)实现原理与公平锁非公平锁区别什么是可重入锁(ReentrantLock)? ...

    thread.rar_进程与线程_Delphi_

    该程序采用多线程技术进行排序,开发语言delphi,可初识多线程

    初识HTML5(入门级的,很好的)

    全书共分为12章,从HTML5的历史故事讲起,涉及了文档结构和语义、智能表单、视频与音频、画布、SVG与MathML、地理定位、Web存储与离线Web应用程序、WebSockets套接字、Web Worker多线程、微数据以及以拖曳为代表的...

    ZMQ专题学习之一:初识ZeroMQ

    ZMQ专题学习之一:初识ZeroMQ  ZeroMQ号称是“史上最快的消息队列”,基于c语言开发的。引用官方说明定义:“ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程...

    C#从入门到精通第1章

    全书共分28章,包括初识C#及其开发环境,开始C#之旅,变量与常量,表达式与运算符,字符与字符串,流程语句控制,数组和集合,属性和方法,结构和类,面向对象技术高级应用,异常处理,Windows窗体,Windows应用程序...

    java-concurrent-source:Java多并发编程从入门到精通源码-源码通

    并行运算,并发运算1.10 Linux和Windows对于并发采取的不同机制第2章认识Java里面的线程2.1先来看一下线程的简单实现三种方法2.2线程里面的属性...异常的处理第3章线程安全3.1初识Java内存模型与多线程3.2什么是不安全...

    2021年华为HarmonyOS Application Developer V1.0视频课程.rar

    初识 Harmonyos1.1 Harmonyos简介zip 调试工具7.1应用调试,zip 分布式数据文件服务5.2数据管理,zip 高效调试7.1应用调试,zip 开发基础知识框架2.2开发基础知识框架,zip 课程介绍与应用开发流程简述2.1课程介绍与应用...

    初识PHP中的Swoole

    PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS...

Global site tag (gtag.js) - Google Analytics