Java中多线程原理详解

11
Java C/C++ 33309 次浏览
学过Java的人都知道,Java是少数的集中支持多线程的语言之一,大多数的语言智能运行单独的一个程序块,无法同时运行不同的多个程序块,Java的多线程机制弥补了这个缺憾,他可以让不同的程序块一起运行,这样可以让程序运行更加顺畅,同时也达到了多任务处理的目的:

  一、线程和进程的概念

  现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。

  进程是程序的一个动态执行过程,是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。“同时”执行是人的感觉,在线程之间实际上轮换执行。

  二、Java中线程的实现

  在Java中药想实现多线程有两种手段,一种是集成Thread类,另一种就是实现Runnable接口。下面看继承自Thread类线程的创建原理:

  首先定义一个线程类 该类必须继承自Thread类,同时必须明确的覆写run()方法

  如:

class MyThread extends Thread{

  public void run(){ //覆写Thread类中的run方法此方法是线程中

  线程主体; 的主体

  }

然后定义一个主类,实例化线程类的对象,发动启动线程的命令

如:

public class ThreadText{

  public stataic void main(String args[]){

  MyThread m1=new MyThread();//实例化对象

  m1.start();//启动多线程

  }

  };

 实现Runnable接口:

  首先定义一个线程类继承自Runnable接口

  如:

class MyThread implements Runnable{

  public void run(){ //覆写Runnable接口中的run方法

  线程主体;

  }


 然后定义一个主类,实例化线程类的对象,发动启动线程的命令

  如:

public class ThreadText{

  public stataic void main(String args[]){

  MyThread m1=new MyThread();//实例化Runnable子类对象

  Thread t1=new Thread(m1);//实例化Thread类对象

  t1.start();//启动多线程

  }

  };


  三、线程的几种状态

  在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。

  第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。

  第二是就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。

  第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。

  第四是阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。

  第五是死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。

请尽量让自己的答案能够对别人有帮助

41个答案

默认排序 按投票排序
0

+++

0

这个应该算是比较基础的解释

0

只能说浅谈吧 

0

很不错呀

0

学习了

0
京东商城招聘了~~

岗位职责:
1、 负责风险控制系统、管理系统、大数据系统等设计、研发以及维护、优化工作;
2、 协助业务方梳理业务需求,提供业务规划方案、架构设计方案,并能根据方案展开研发工作;(高级及以上)
3、 带领团队攻克高并发、高稳定性,业务模型复杂等带来的各种挑战及技术难关;(高级及以上)
4、 参与项目的系统设计和核心代码开发,指导和培训其他工程师; (高级及以上)
5、 整理和提交技术文档,负责产品功能模块的代码编写和单元测试。

任职要求:
1、 计算机科学、计算机软件、通信或相关专业本科及以上学历;
2、 具有扎实的Java基础,熟悉J2EE体系结构,熟悉IO、多线程、集合等基础框架,熟悉分布式、缓存、消息、搜索等机制;
3、 具有良好的系统分析、架构设计能力,熟悉软件系统分析/设计的方法论,并有丰富的实践经验;(高级及以上)
4、 熟悉单元测试技术和TDD,熟悉Linux、UML;
5、 熟练掌握数据库Oracle和MySQL的使用;
6、 熟悉WEB相关标准(HTML、CSS、JS、HTTP),有至少1年的web应用开发经验者优先;
7、 具备金融风险控制和分析系统或相关产品研发经验者优先;
8、 有在Hadoop、HBase、Storm等分布式平台开发测试经验者优先;
9、 良好的学习能力、沟通能力、适应能力,责任心强;
10、能承受一定的工作压力,有责任心,上进心和自我驱动力,能通过持续学习完善自身。

简历接收人:
wangpeixuaninfo@360buy.com 
邮件主题:招聘_姓名
0

学习了

0
进程和线程的概念  说的不错
0

面试中可能会用到,受教了

0

0
很不错,谢谢
0
似乎可以再多加強點內容
0

感谢楼主分享经验!!!

0
哈哈  
0
这是基本的..
0
学习了
0

是啊 , 这也是详解?

0

  招聘单位:京东商场
  招聘职位:Java软件开发工程师
职位要求:
1. 大学本科以上学历,计算机及相关专业毕业,2年以上工作经验;
2. 熟悉MVC构架模式,精通应用Struts+Mybatis+spring开发Web应用;
3. 熟悉XML,Web Service; 熟悉基于Oracle的数据库编程:SQL,PL/SQL;
4. 熟悉Hibernate O/R Mapping、面向对象的软件分析、设计方法OOAD和UML;
5. 有大型网站或应用软件开发经验者优先。
任职资格 
1、熟练掌握SQL Server数据库前台编程及后台管理,及T-SQL语言;
2、有过以上相关软件的开发经验;
3、具有良好的沟通能力和团队合作精神;负责交易系统开发。
4、可承受一定的工作压力,并在指定的时间内完成高质量的程序。

简历接收人:
wangpeixuaninfo@360buy.com

0
这不能叫详解吧
0
不错.
1 2