最近时间在学习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();
}
}
分享到:
相关推荐
Java核心知识点总结:这些文档整理了Java编程语言的核心概念和重要知识点,如面向对象编程、异常处理、输入输出、反射等。通过学习这些知识点,您可以加深对Java语言的理解,为面试时的技术问题做好准备。 面试经验...
这份宝典囊括了Java编程中的基础知识、多线程编程、数据库操作、Spring框架、Spring Boot、Spring Cloud、Linux操作系统、分布式系统、设计模式、面试指导以及自我介绍等内容。 基础部分,包括Java编程语言的核心...
本文分为十九个模块,分别是:Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、 Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、...
Java编程基础是深入理解与应用Java技术的基石,涵盖了面向对象编程的基本概念、数据类型、控制结构、类和对象的定义与使用、封装、继承、多态等核心特性,还包括异常处理机制、集合框架、IO流操作以及线程并发等内容...
按照科学的学习规律,由浅入深、循序渐进地向读者讲述了Java开发环境的搭建、Java基础语法知识、Java算法流程、面向对象高级特性、Java的输入/输出、多线程机制、Swing界面编程、Applet的基本知识、Java 2D/3D、...
第1周介绍Java语言的基本知识,包括数据类型、变量、表达式、对象、数组、条件语句、循环、类、接口、包、异常、断言和线程等;第2周介绍Java类库,包括向量、堆栈、映射、散列表和位组等数据结构,以及Swing组件、...
包含非常丰富的Java知识点和海量面试题,整理自“程序员乔戈里”,感谢原作者的辛苦付出,本资源作为搬运,是因为原作者的链接无法访问了,自己通过一些手段辛苦下载下来,希望能帮到大家! 搜集不易,请予以点滴...
通过阅读和理解这些程序,学习者可以深入掌握Java中的高级概念,如多线程、数据结构、算法等。 实际编程案例:每个程序阅读题都是一个实际的Java代码示例,这些示例代码来源于实际项目或场景。通过分析这些案例,...
最新Java后端面试题是针对求职者准备的一份全面的面试指南,旨在帮助他们掌握Java后端开发的核心知识点和技能。这份面试题库经过精心策划和更新,确保覆盖了市场上90%的Java后端相关职位的考点。它不仅包含了基础...
这是我自己整理JAVA基础知识写的一个网上银行项目,里面包含了集合、接口、枚举、反射、泛型、多线程、I/O流操作、XML文件解析、工厂模式等知识点,基本上包含了JAVA的一些重要的常用的技术点,自我觉得是一个检验...
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 ...
包含了多个模块的面试题讲解,如:Redis、MySQL、框架、微服务、消息中间件、数据结构、Java集合源码分析、多线程、JVM、设计模式、高并发场景、企业实际问题场景等等各个方面逐一讲解。 欢迎在观看同时参考这篇博客...
该项目旨在通过毕业设计的实践,使学生能够综合运用Java编程知识,掌握游戏设计的基本原理和开发流程。 **项目简介** “堡垒”是一款策略类游戏,玩家需要利用有限的资源建造和升级防御工事,抵御敌人的进攻。游戏...
本课程主要介绍了Java 语言的功能和特点,主要内容包括:Java 语言基础知识,Java 语法构成,面向对象编程技术,常用系统类使用,图形用户界面设计,图形处理,多媒体处理,异常处理,文件和流处理,多线程技术等,...
最新jvm面试题合集,涵盖JVM运行时数据区、垃圾回收算法、垃圾回收器、类加载机制、JIT即时编译等核心知识点及常见面试题,一书在手,天下我有。 JVM内存结构:JVM的内存结构主要包括堆内存、方法区、栈(包括Java...
项目内所包含的主要基础知识:对象、输入输出流、多线程、javax.swing部分的画图如graphic画笔等。里面也有一些不足需要改进,希望能与读者多交流共同改正。制作不易,大神勿喷。解压密码:tkzw
该课程体系通过结合先进的多模式教学法,使学习者在掌握理论知识与工具的同时,具备良好的自我学习能力和个人素质,成为符合21世纪企业要求的IT人才。 ACCP 6.0是北大青鸟APTECH推出的最新软件工程师职业教育课程...
该课程体系通过结合先进的多模式教学法,使学习者在掌握理论知识与工具的同时,具备良好的自我学习能力和个人素质,成为符合21世纪企业要求的IT人才。 ACCP 6.0是北大青鸟APTECH推出的最新软件工程师职业教育课程...
网络插座如何设计一个服务框架 Java锁和螺纹通用 Nginx的零拷贝和mmap tcp 分散事务 伊努克斯 不育系多线程秒杀架构算法 卡夫卡 API设计 Java级别在我准备面试的过程中,深刻的思考了如何才能更好地更快速地做知识...
2) 自我评析和总结 上机时间安排: 19周一 ~ 五 下午14:00 - 18:00 (6月27日开始) 指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日 五、源代码 #include #include <conio.h> #include ...