小谈Java里的线程
今天,我们来谈一谈Java里的线程。
一、进程与线程的基本概念
大家可能没听过线程这个概念,但是相信,用计算机的朋友都听过进程这个概念。打开电脑的任务管理器,我们就可以看到许多进程。它们主要分为三类,应用进程、后台进程与windows进程。我们可以把进程称为程序运行的一个单位,而线程,就是一个比进程还小的运行单位。
引用一段百度而来的关于进程与线程的资料:
进程和线程都是由操作系统所体现的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
进程和线程的区别在于:
简而言之,一个程序至少有一个进程,一个进程至少有一个线程。
二、多线程的概念
知道了线程是什么,接下来我们来讲一讲多线程的概念。多线程,顾名思义,就是多个线程一起工作。我看过这么一种举例,这里借来用作说明。就好比吃饭,单进程单线程,就是一个人在一张桌子上吃饭。单进程多线程,就是多个人在一个桌子上吃饭。多进程多线程,就是多个人在多张桌子上吃饭。使用多线程的好处在于能够提高程序的效率。但是,对于一个线程来说,创建它需要一定的内存,运行也会消耗CPU的资源。对于我们普通电脑的内存和CPU来说,线程显得有些“昂贵”。就好比吃饭,多个人在一个桌子上吃饭难免会有拥挤。因此,实际上,多线程的运行方式并非多个线程同时运行。而是对于一段时间来说,分为若干个极小的时间片,然后给不同的线程分配不同的时间片去让它运行。然而,这个时间过于短暂,所以我们可以看成是多个线程一块运行。
三、线程的创建
按照进程与线程的定义来看,一个程序最少有一个进程,一个进程最少有一个线程。然而,事实上,在我们自行编写一些应用程序,诸如画图板和五子棋的时候,我们并没有用到所谓的线程。这似乎与线程的概念有所违背。事实上,对于上述缩写的代码,并不是由我们去创建的线程,而是Java虚拟机帮我们创建的线程。
接下来进入我们的主题——创建线程。
创建线程有两种方法。
1、实现Runnable接口。
2、继承Thread类。
首先,我们来看第一种。实现接口我们之前有提到,implements。之后,我们需要在该类中重写Runnable类里的抽象方法。我们可以看到,在Runnable接口里,有一个名为run的抽象方法。我们需要做的是重写run方法,之后,通过调用run方法的方式,告诉Java虚拟机运行我们创建的线程。
具体代码如下:
package thread;
public class Runnablelh implements Runnable{
public static void main(String[] args) {
Runnablelh ll=new Runnablelh();
ll.run();
}
public void run() {
System.out.println("-------------");
}
}
不过,我们常用的多为第二种方式。Thread类是API中一个实现了Runnable接口的类,不过在Thread类中添加了一些与线程操作相关的方法。比如start、sleep等等。这里,我们不再调用run方法,而是改为调用start方法告诉虚拟机运行我们的线程。
给出一段代码:
package thread;
public class threadtext extends Thread{
public static void main(String[] args) {
for(int i=0;i<5;i++){
threadtext t=new threadtext();
t.start();
}
}
public void run(){
System.out.println("线程"+Thread.currentThread()+"正在运行");
}
}
注意,这里的currentThread方法表示的是输出该线程的名字。线程的名字可以自行设置,若没有设置则是由系统自动提供。
这里注意一个细节,当你运行这段程序的时候,得到的结果可能不完全相同。以下给出两次运行的结果:
之前我们提到过,我们的start与run是告诉Java虚拟机需要运行我们的线程。然而这个时间是不确定的,所以就导致了两次结果的不相同。注意一点,对于一个线程,一般情况下,当你的run方法运行完,那么一个线程就结束了。除非你加上了一些语句使得线程不关闭或者延长其运行时间。
以上,就是我对于线程的一些认识。如有不对之处,请大家指正。
小谈Java里的线程的更多相关文章
- 并发编程——认识java里的线程
本文系作者 chaoCode原创,转载请私信并在文章开头附带作者和原文地址链接. 违者,作者保留追究权利. 前言 并发编程在我们日常开发中是时时刻刻都有在用的,只不过大部分的代码底层已经帮我们去做了一 ...
- 小谈python里 列表 的几种常用用法
在python中列表的常用方法主要包括增加,删除,查看和修改.下面以举例子的方法具体说明,首先我们创建两个列表,列表是用[ ]表示的,里面的元素用逗号隔开. a=[‘hello’,78,15.6,‘你 ...
- Java里一个线程两次调用start()方法会出现什么情况
Java的线程是不允许启动两次的,第二次调用必然会抛出IllegalThreadStateException,这是一种运行时异常,多次调用start被认为是编程错误. 如果业务需要线程run中的代码再 ...
- 谈谈java中的线程(初级概念)
定义 关于进程与线程的定义 可参看一下这个介绍 http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html 在不细抠定义的情况下 ...
- 关于Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇高质量的博文)
Java多线程的线程同步和线程通信的一些小问题(顺便分享几篇质量高的博文) 前言:在学习多线程时,遇到了一些问题,这里我将这些问题都分享出来,同时也分享了几篇其他博客主的博客,并且将我个人的理解也分享 ...
- (转载)Java里快如闪电的线程间通讯
转自(http://www.infoq.com/cn/articles/High-Performance-Java-Inter-Thread-Communications) 这个故事源自一个很简单的想 ...
- 浅谈Java线程安全
浅谈Java线程安全 - - 2019-04-25 17:37:28 线程安全 Java中的线程安全 按照线程安全的安全程序由强至弱来排序,我们可以将Java语言中各种操作共享的数据分为以下五类 ...
- Java 里如何实现线程间通信(转载)
出处:http://www.importnew.com/26850.html 正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程 ...
- Java 里如何实现线程间通信
正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及到的知识点:thread.join(), object.w ...
随机推荐
- Java-Android【2】-弹出对话框
一.在Activity的方法中加入代码 new AlertDialog.Builder(this) .setTitle("Title") .setMessage("Mes ...
- solr4.5安装配置 linux+tomcat6.0+mmseg4j-1.9.1分词
首先先介绍下solr的安装配置 solr下载地址 (我这用的solr-4.5.0) 运行环境 JDK 1.5或更高版本 下载地址(Solr 4以上版本,要求JDK 1.6) 我用的JDK1.6 ) ...
- ElasticSearch问题记录
1.Young GC导致集群master重新选举,一台server fail [2016-12-10 07:38:24,546][WARN ][transport ] [BFRD_1] Receive ...
- NOIP2016普及总结
---恢复内容开始--- 当时我说如果不出意外有385,结果就这么跪在了第二题,惨啊 本来以为发挥算正常,结果这发挥太不正常了 [T1] 水题啊[趴 注意下细节就好考你会不会写代码. [T2] 这题大 ...
- css3的动画特性
css3 的过渡动画,有些时候会产生一些其他问题. 比如:你想先改一个css属性,之后再进行动画过渡,结果实际上你会发现,css属性和动画是同步进行的.这个应该是在编译阶段就确定好了. 所以只能通过s ...
- CF-补题1
CF-补题1 1.CodeForces 735C 题意:n个人淘汰赛,两个人可以比赛的条件是:两人打过的场数之差绝对值<2.求冠军最多可以打多少场. 总结:看了题解,转换一下思路.求n个 ...
- View的滑动
View的滑动 通过三种方式可以实现View的滑动: 1.通过View本身提供的scrollTo/scrollBy方法来实现滑动 2.通过动画给View施加平移效果来实现滑动 3.通过改变View的L ...
- jquery中focus()失效怎么解决
又学到一个新的知识! 今天在写表单验证的时候遇到一个关于获取焦点的focus()问题. 场景说明:在验证密码输入格式不对之后,弹出alert()提示框,提示密码不对,请重新输入.同时清空密码框并获得焦 ...
- 一些gcd计数问题
数论什么的全都忘光了吧QAQ 做了几道简单的题练习一下. bzoj1101: [POI2007]Zap 求有多少对数满足 gcd(x,y)=d, 1<=x<=a, 1<=y<= ...
- 非常棒的Android对话框效果
FlycoDialog_Master http://www.see-source.com/androidwidget/detail.html?wid=488 带有各种动画效果的弹出对话框控件.你也可以 ...