一篇博文从认识到熟练使用JAVA多线程

原创 2016年12月01日 22:46:53

支持多线程的程序设计是Java语言的重要特征之一,尤其是随着当前多核CPU的问世,使得多线程多线程在开发中占有了更重要的位置。

本文要点:

1.多线程的概念和创建方法


正文

在说多线程之前我们先来理清几个概念:什么是程序?什么是进程?什么是线程?它们之间的相互关系?以及有何区别?下面我一一解释:

程序:就是一段代码,它是软件运行的蓝本

进程:是程序的一次动态的执行过程,这里重点是“过程”二字。也就是从代码加载、执行、到执行完毕的一个完整的过程。

线程:线程是比进程更小的一个执行单元

线程是进程中可独立运行的子任务,一个进程可以产生多个线程,而每个线程都有它本身从产生、存在到消亡的过程,这里重点也是“过程”二字

线程与进程的主要区别就是:进程大体分为数据区、代码去、栈区、堆区,不同进程之间是相互独立的,包括进程的内部数据和状态都是完全独立的。

而线程则共享它本身所属进程的数据区、代码区、堆区,只有它自己的栈区是独立的,所以线程间的切换要比进程间的切换代价小


好了,这三个小问题解决了也该进入主题了,什么是多线程?它有什么作用?

理解了上面的三个知识点,那么下面再说多线程就简单多了。
多线程就是指在一个程序中包含了多个执行流,是实现并行的一种有效手段。也就是说一个进程中创建多个并行执行的线程来完成多个子任务。
这样理解起来是不是就很简单了。
当然了,学过操作系统的都知道,这并不是真正的并行。因为操作系统是使用时间片来轮流执行每个进程的,看上去像是并行而已,此处先不讨论这个问题,以后我再开个博文专门说说这个(到底是串行用时少还是并行用时少?容我以后慢慢道来)

那么,现在你也知道多线程是个什么鬼了,那么在Java中它是怎么存在的呢?

在java中有一个类,lava.lang.Thread类,程序中运行的所有线程都是它的实例。明白了吧?所以你要想自己创建一个子线程只需要去实例Thread类就行了。在Thread类里面已经封装好了一个线程所需要的属性和方法。
在Thread类里面是这样定义线程的:线程是程序中的一个执行流。而一个执行流就是由CPU运行程序的代码并操作程序的数据所形成的。因此,线程被认为是以CPU为主体的行为。所以说在java里面线程的模型就是一个虚拟的CPU,代码和数据的封装体。在这里需要知道的是这里的代码和数据是相互独立的。

线程创建

线程的创建由两种方法:
(1)通过继承Thread类创建线程
(2)通过实现Runnable接口创建线程
先说第一种创建方法
由于Thread类本身就实现了Runnable接口,而且上面也说过了,线程本身也就是Thread类或其子类的对象实例,所以你在创建你自己的线程的时候,只需要继承Thread类并实现它的run()方法就行了
eg:
public class MyThread extends Thread{
   public void run(){
   }
}
这样就创建成功了,启动的时候,去创建一个该类的实例并调用start()方法即可
MyThread t = new MyThread();
t.start();
第二种创建方法
这种就更简单了,创建一个类实现Runnable接口。
public class MyThread implements Runnable{

        public void run() {
            
        }
    }

使用的时候创建一个该类的对象并传给Thread的构造函数,从而创建一个线程,两者异曲同工之妙:
MyThread t = new MyThread();
Thread d = new Thread(t);

启动的时候调用start()方法即可
d.start();







版权声明:本文为博主原创文章,可以随意转载,但请附原地址或原作者名。谢谢!

相关文章推荐

java 多线程 例子 入门博文一

网上找的一些例子觉得不能说明问题,重写了一个主要来体现synchronized的效果 public class TestRunnable implements Runnable { private ...

Java多线程看着一篇足够了!

引 如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来...

Java中的多线程你只要看这一篇就够了

转自:http://www.jianshu.com/p/40d4c7aebd66 Java中的多线程你只要看这一篇就够了 字数3900 阅读16810 评论11 喜欢295 引 ...

java多线程性能浅析 - 一篇把线程描述得很形象的文章

转自:http://www.javaeye.com/topic/848486   java多线程性能浅析 - 一篇把线程描述得很形象的文章 2010年12月22日 星期三 上午 10:23 ...

Java中的多线程你只要看这一篇就够了

引 如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说...

Java中的多线程 这一篇就够了

引 如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说...

Java中的多线程你只要看这一篇就好了

 引 如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来...

Java中的多线程你只要看这一篇就够了

如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这...
  • Mos_wen
  • Mos_wen
  • 2016年12月26日 18:37
  • 148

《JAVA与模式》之策略模式——我看过最好的一篇策略模式博文

《JAVA与模式》之策略模式(转载自http://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html) 在阎宏博士的《JAV...

一篇博文彻底了解线程的调度策略

线程的调度策略 在java的线程开发中,线程的调度策略是一个很重要的知识点,起承上启下的作用,所以我们下面去一起看看系统是怎么安排线程之间的运行规则的。 线程调度的目的 首先我们要知道,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一篇博文从认识到熟练使用JAVA多线程
举报原因:
原因补充:

(最多只允许输入30个字)