`
遛遛遛
  • 浏览: 52424 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

java线程知识自我总结(一)

    博客分类:
  • java
阅读更多

最近时间在学习java的多线程,做一个小整理记录一下学习进度。

 

对于多线程的概念,在此就不多做解释。

第一部,就是创建一个线程类: 创建线程类一般有两种方法,一个是继承(extends)Thread类,另一个是实现(implements) Runnable接口。

 

 

//继承Thread类

public class SonThread extends Thread {
	
	@Override
	public void run() {
		//dosomething();
	}
}

//实现Runnable接口,实现Runnable接口的类必须使用Thread类的实例才能创建线程。

public class SonThread implements Runnable {
	
	@Override
	public void run() {
		//dosomething();
	}
}
 

 

 两种方法各有自己长处吧,根据实际项目中的需要而选择,要是一个类不仅要是一个线程类,而且还必须是其他一个类的子类,那么如果继承了Thread,就不能继承另外一个类了,因为java是单继承。这个时候就可以考虑实现Runnable接口。

 

当一个SonThread实例对象调用start()方法之后,则会运行run()方法。

 

 

//启动一个线程,打印消息。

public class SonThread extends Thread {
	
	@Override
	public void run() {
		for(int i=0;i<10;i++) {
			System.out.println("= =#");
		}
	}
	
	public static void main(String[] args) {
		new SonThread().start();
	}
}

 

 

 当程序执行了start()方法后,便会启动一个新线程,执行run()方法中的内容。

 

 

 

sleep()方法

 

简单的说,当一个线程调用了sleep()方法后,会“睡眠”一段时间,要“睡眠”多久由你自己来决定。

 

 

 

//隔一秒打印出一行消息

public class SonThread extends Thread {
	
	@Override
	public void run() {
		for(int i=0;i<10;i++) {
			try {
				sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println("= =#");
		}
	}
	
	public static void main(String[] args) {
		new SonThread().start();
	}
}

 

 

在这里要注意的是,sleep()方法需要try-catch。在一个线程调用了sleep()方法后,如果在没有“醒来”前,又调用了interrupt()方法,则会抛出一个InterruptedException异常,表示被打断,则该线程会直接退出run()方法而终止运行。

 

sleep方法有两个重载形式:

 

//sleep()方法

public static void sleep(long millis)  throws InterruptedException  
public static void sleep(long millis,  int nanos)  throws InterruptedException 

 

 

  第一种是以毫秒为单位,第二种的第一个参数也是以毫秒为单位,第二个参数是以纳秒为单位。

  一般来说,用第一种就好了。

 

 

 

 

interrupt()方法

 

线程结束:第一种就是run()方法运行完毕,线程则结束。另一种是调用了中断线程的方法,如interrupt()方法,他作用就是用来中断线程。调用interrupt()可以使一个被阻塞的线程抛出一个中断异常(InterruptedException),从而使线程提前结束阻塞状态,退出堵塞代码。若是在线程运行期间调用此方法,则无效。

 

在Thread类中有两个方法可以判断线程是否通过interrupt方法被终止。一个是静态的方法interrupted(),一个是非静态的方法isInterrupted()。当然,在java中,打断线程的方法不止一个,还有一个stop()方法,这个方法在java中已经被遗弃,原因是一个不安全的退出,强迫线程停止执行。举个例子,借用老马经典的话:interrupt方法,是往熟睡的人身上泼凉水,那个人就醒过来了,该干嘛干嘛去。而stop方法则是将熟睡的人一棍子给打死,一点机会也不给。 = =# 这就是强迫线程停止,如果某些线程占着一部分资源,被强制停止后,资源可能永远都释放不了。

 

 

//例子程序

import java.io.IOException;


public class SonThread extends Thread {
	
	@Override
	public void run() {
		try {
			sleep(50000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args)throws IOException {
	
		SonThread son = new SonThread();
		son.start();
		System.out.println("50秒之内,按任意键终止线程");
		System.in.read();
		son.interrupt();
	}
}
 

 

2
1
分享到:
评论

相关推荐

    Java面试文档压缩包

    Java核心知识点总结:这些文档整理了Java编程语言的核心概念和重要知识点,如面向对象编程、异常处理、输入输出、反射等。通过学习这些知识点,您可以加深对Java语言的理解,为面试时的技术问题做好准备。 面试经验...

    20万字必备java面试八股文宝典-多线程.数据库.Spring.SpringBoot.Linux.分布式.设计模式.面试指导

    这份宝典囊括了Java编程中的基础知识、多线程编程、数据库操作、Spring框架、Spring Boot、Spring Cloud、Linux操作系统、分布式系统、设计模式、面试指导以及自我介绍等内容。 基础部分,包括Java编程语言的核心...

    2022年 Java精选面试题+面试技巧+面试自我介绍大全

    本文分为十九个模块,分别是:Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、 Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、...

    JAVA八股文基础部分

    Java编程基础是深入理解与应用Java技术的基石,涵盖了面向对象编程的基本概念、数据类型、控制结构、类和对象的定义与使用、封装、继承、多态等核心特性,还包括异常处理机制、集合框架、IO流操作以及线程并发等内容...

    Java程序设计与项目实战全程实录光盘

    按照科学的学习规律,由浅入深、循序渐进地向读者讲述了Java开发环境的搭建、Java基础语法知识、Java算法流程、面向对象高级特性、Java的输入/输出、多线程机制、Swing界面编程、Applet的基本知识、Java 2D/3D、...

    21天学通Java_6

    第1周介绍Java语言的基本知识,包括数据类型、变量、表达式、对象、数组、条件语句、循环、类、接口、包、异常、断言和线程等;第2周介绍Java类库,包括向量、堆栈、映射、散列表和位组等数据结构,以及Swing组件、...

    19个非常全的Java面试题和面经PDF,辛苦整理,希望帮助到大家

    包含非常丰富的Java知识点和海量面试题,整理自“程序员乔戈里”,感谢原作者的辛苦付出,本资源作为搬运,是因为原作者的链接无法访问了,自己通过一些手段辛苦下载下来,希望能帮到大家! 搜集不易,请予以点滴...

    java高级复习笔记-程序阅读题.docx

    通过阅读和理解这些程序,学习者可以深入掌握Java中的高级概念,如多线程、数据结构、算法等。 实际编程案例:每个程序阅读题都是一个实际的Java代码示例,这些示例代码来源于实际项目或场景。通过分析这些案例,...

    Java后端面试题大纲(涵盖了百分之九十的考点).pdf

    最新Java后端面试题是针对求职者准备的一份全面的面试指南,旨在帮助他们掌握Java后端开发的核心知识点和技能。这份面试题库经过精心策划和更新,确保覆盖了市场上90%的Java后端相关职位的考点。它不仅包含了基础...

    网上银行项目--CoreJava基础练习

    这是我自己整理JAVA基础知识写的一个网上银行项目,里面包含了集合、接口、枚举、反射、泛型、多线程、I/O流操作、XML文件解析、工厂模式等知识点,基本上包含了JAVA的一些重要的常用的技术点,自我觉得是一个检验...

    学通Java的24堂课

    1.3 编写第一个java程序 14 1.3.1 在记事本中输入代码 14 1.3.2 保存代码为源代码文件 15 1.3.3 编译并运行java文件 16 1.4 照猫画虎——基本功训练 16 1.4.1 基本功训练1——更换java_home环境变量 16 1.4.2 ...

    Java大厂面试专题课-MySQL面试题-参考回答

    包含了多个模块的面试题讲解,如:Redis、MySQL、框架、微服务、消息中间件、数据结构、Java集合源码分析、多线程、JVM、设计模式、高并发场景、企业实际问题场景等等各个方面逐一讲解。 欢迎在观看同时参考这篇博客...

    Java毕业设计-java手机游戏(堡垒)的设计与开发(源代码+论文).rar

    该项目旨在通过毕业设计的实践,使学生能够综合运用Java编程知识,掌握游戏设计的基本原理和开发流程。 **项目简介** “堡垒”是一款策略类游戏,玩家需要利用有限的资源建造和升级防御工事,抵御敌人的进攻。游戏...

    《面向对象程序设计java)》课程整体教学设计.docx

    本课程主要介绍了Java 语言的功能和特点,主要内容包括:Java 语言基础知识,Java 语法构成,面向对象编程技术,常用系统类使用,图形用户界面设计,图形处理,多媒体处理,异常处理,文件和流处理,多线程技术等,...

    最新java面试专题01-JVM

    最新jvm面试题合集,涵盖JVM运行时数据区、垃圾回收算法、垃圾回收器、类加载机制、JIT即时编译等核心知识点及常见面试题,一书在手,天下我有。 JVM内存结构:JVM的内存结构主要包括堆内存、方法区、栈(包括Java...

    飞机大战项目——PlaneGame java项目

    项目内所包含的主要基础知识:对象、输入输出流、多线程、javax.swing部分的画图如graphic画笔等。里面也有一些不足需要改进,希望能与读者多交流共同改正。制作不易,大神勿喷。解压密码:tkzw

    北大青鸟ACCP 6.0 软件开发初级程序员:使用Java实现面向对象编程.pdf

    该课程体系通过结合先进的多模式教学法,使学习者在掌握理论知识与工具的同时,具备良好的自我学习能力和个人素质,成为符合21世纪企业要求的IT人才。  ACCP 6.0是北大青鸟APTECH推出的最新软件工程师职业教育课程...

    北大青鸟ACCP 6.0 软件开发初级程序员:使用Java理解程序逻辑.pdf

    该课程体系通过结合先进的多模式教学法,使学习者在掌握理论知识与工具的同时,具备良好的自我学习能力和个人素质,成为符合21世纪企业要求的IT人才。  ACCP 6.0是北大青鸟APTECH推出的最新软件工程师职业教育课程...

    my-love:(都是脑图,建议使用xmind 8 :)工程师的自我修养->从linux,网络,MQ,Rpc,缓存,高可用架构,数据库,语言,全面成长,成为技术大神,优秀的工程师,自述文件,包括蚂蚁,头条,美团等面试思考(拿下要约)

    网络插座如何设计一个服务框架 Java锁和螺纹通用 Nginx的零拷贝和mmap tcp 分散事务 伊努克斯 不育系多线程秒杀架构算法 卡夫卡 API设计 Java级别在我准备面试的过程中,深刻的思考了如何才能更好地更快速地做知识...

    读者写者问题课程设计

    2) 自我评析和总结 上机时间安排: 19周一 ~ 五 下午14:00 - 18:00 (6月27日开始) 指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日 五、源代码 #include #include &lt;conio.h&gt; #include ...

Global site tag (gtag.js) - Google Analytics