Java多线程知识点介绍
线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。Java多线程知识点介绍分享给大家,欢迎大家阅读!
Java多线程知识点介绍一、概述
标题很抽象,什么叫更简单?更是相比谁来说的呢?
原来,我们定义任务,都是实现自Runnable或者Callable接口,但是这样必然需要你将新定义的任务附着给线程,然后再调用线程启动。在不考虑Executor的情况下,你会感觉这么做很呆板,如果直接new一个任务对象,他自己就能启动的话,是不是更好?这就是更简单的线程这个标题的由来。
二、实现
1.继承自Thread
因为Thread实现了Runnable接口,所以继承自Thread的类,实现其run方法,其中定义的也就是任务。
这样做的好处是,可以直接调用父类的start方法,可以实现概述中要实现的效果
public class TaskExtendsThread extends Thread{ private int countDown = 5; private static int threadCount = 0; /* * 可以在它的构造方法里直接调用run方法 */ public TaskExtendsThread(){ super(ring(++threadCount)); start(); } public String toString(){ return "#"+getName()+"("+countDown+")."; } public void run() { while(true){ tln(this); if(--countDown == 0 ) return ; } } public static void main(String[] args){ for(int i = 0 ;i < 5 ;i++) new TaskExtendsThread(); }
}
这样,在new一个对象时就会让你的任务自动附着给线程并启动。
2.自管理的Runnable,实现Runnable接口。例如SelfManagedThread
既然已经有了Thread类的实现,为什么还要有自管理Runnable呢?这样做和继承Thread没有区别,只是这样做会让你的类更灵活,实现了该类还可以继承其他你想让他继承的类。
public class SelfManagedThread implements Runnable{ private int countDown = 5; private Thread t = new Thread(this); /* * 在构造器中启动线程可能会变得很有问题 * 因为另一个任务可能会在构造器结束之前开始执行,这意味着该任务能够访问处于不稳定状态的对象 */ public SelfManagedThread(){ t(); } public String toString(){ return entThread()ame()+"("+countDown+")."; } @Override public void run() { while(true){ tln(this); if(--countDown==0) return; } } public static void main(String[] args){ for(int i = 0; i < 5 ;i++) new SelfManagedThread(); }
}
三、然并卵
这个大标题起的很好,因为目前为止,只知道这两种方式,都是在构造器中启动线程的,这可能会变的很有问题,因为另一个任务可能会在构造器结束之前开始执行,这意味着该任务可能访问处于不稳定状态的对象.故:优选Executor而不是显示地创建Thread对象的一个原因,但是也不能说这样的解决方式完全没有用,待有朋友看到文章后给些提示……
四、线程的`术语
至此,关于线程的实现,大部分总结完了,剩下的就是竞争资源、线程同步等并发方面的问题了。所以,在此总结下线程的术语
术语
|——线程并不是任务,线程不做任何事情只是驱动附着给它的任务执行
|——Runnable接口理解:可以理解为该方法的反型封装,即它执行能做的事情
|——其实任务应该实现一个名为Task的接口,这样更容易理解java中的线程
|——从概念上讲:我们希望创建独立于其他任务运行的任务,因此我们应该能够定义任务,然后说“开始”,并且不用操心细节。
|——java的线程机制基于来自c的低级的p线程方式,这事你必须深入研究,并且需要完全理解其所有事务的所有细节的方式,这种低级特性部分地渗入 了java的实现中,因此为了处于更高的抽象级别,在编写代码时,你必须遵循规则
|——任务:在描述将要执行的工作时使用术语“任务”;在引用到驱动任务的具体机制时,使用属于“线程”
-
java的应用范围
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。自从sun公司推出java语言以来,java极大受到开发者和企业的欢迎,在互联网如此发达的今天,java语言得到了广泛的应用,比如网站,游戏,电子商务等,java语言在这些领域开发占很大的比例。在全球云计算和移动互...
-
java考试复习题
人类的希望像是一颗永恒的星,乌云掩不住它的光芒。特别是在今天,和平不是一个理想,一个梦,它是万人的愿望。以下是小编为大家搜索整理的java考试复习题,希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!一、选择题1、以下程序段执行后的K值为()。...
-
java虚方法
我们已经讨论了方法的重载,也就是子类能够重载父类的方法。以下是小编为大家搜索整理的java虚方法,欢迎大家阅读!更多精彩内容请及时关注我们应届毕业生考试网!当子类对象调用重载的方法时,调用的是子类的方法,而不是父类中被重载的.方法。要想调用父类中被重载的...
-
java的基础语法教学
java的基础语法教学前言学习完了第一个java程序,之后就来系统的学习java。先从基础语法开始,这个语法你也可以理解为英语或是汉语里面的语法,只不过大家各有各的特点和区别。学习编程其实也是一个编程语言的学习过程。我们在学习英语的.时候都说,要想学习好英语一...