彩票走势图

使Java多线程更加完善的方法

转帖|其它|编辑:郝浩|2010-05-27 14:01:42.000|阅读 621 次

概述:Java多线程在使用的过程中一直都不知道如何才能更加的完善呢?这个问题需要我们大家不断的进行学习和研究。下面我们就来详细的学习下相关问题的解决方案。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  Java语言中有一个重要的特性是支持Java多线程。Java多线程是java的一项高级技术,它涉及到操作系统里面的知识,层次贴近系统层面。对于普通程序员一般很少碰它。而且目前就是在java EE(原来的J2EE)的相关框架里,对线程这个东西都是尽量回避。程序员最理想的状态是专注业务逻辑,而不是天天想着线程这个东西怎么写。

  思考一个问题程序的本质是什么?是CPU的指令序列的集合。到底什么顺序是程序员编写的让计算机赋值,它就赋值、写个循环它就循环、写个分支语句它就分支、写个跳转它就跳转。每个指令流就是一个线程,并发执行多个指令流就是Java多线程。大家想,只有一个CPU怎么可能同时发出多个指令流呢?是的,并发只是“逻辑”上的,物理上是不可能的除非是两个以上的CPU。

  Java多线程和传统的单线程的区别是由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,出现了并发访问带来的一切问题。正像是三个和尚的故事,和尚多了未必是好事。也就是刚才说的,程序员一般都不让他们碰这个东西。

  在java中如何写线程呢,在java中就是很简单了。有两种方法:第一、继承java.lang.Thread第二、实现Runnable接口。实践:

  继承Thread而重写了run()方法


 1.public class Hello extends Thread{
  2.int i;
  3.public void run(){
  4.while(true){
  5.System.out.println("Hello "+i++);
  6.if(i==10) break;
  7.}}}
  8.public class HelloThread {
  9.public static void main(String[] args){
  10.Hello h1 = new Hello();
  11.Hello h2 = new Hello();
  12.h1.start(); //用两个线程执行那10次循环
  13.h2.start();
  14.}} 上面的例子是第一种方法,下面是第二种方法
  15.public class TestThread {
  16.public static void main(String args[]) {
  17.Xyz r = new Xyz();
  18.Xyz r1 = new Xyz();
  19.Thread t1 = new Thread(r);
  20.Thread t2 = new Thread(r1);
  21.t1.start();//用两个线程执行那50次循环
  22.t2.start();
  23.}} //实现Runnable接口
  24.class Xyz implements Runnable {
  25.int i;
  26.public void run() {
  27.i = 0;
  28.while (true) {
  29.System.out.println("Hello " + i++);
  30.if ( i == 50 ) {
  31.break;
  32.}}}}

  上面两种方法继承Thread类,Java多线程是比较简单的,代码也比较少。但是我们不提倡使用这种方法。而第二种实现Runnable接口,更符合面向对象思想,Thread是把虚拟的CPU看成一个对象,封装了CPU的细节。但是Thread的构造线程的子类的方法中与CPU不相关,没有必要把CPU的细节都继承来。而实现Runnable则不影响java.lang.Thread的体系。而且便于其它类的继承。

  Java多线程发的代码和数据的执行顺序混乱,我们也需要自己调度和控制它们。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP