a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 93|回复: 0

[基础知识] JAVA基础:Java多线程与传统线程之间的差异

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
Java多线程在使用的过程一一向都不知道若何才能加倍的完美呢?这个问题需要我们巨匠不竭的进行进修和研究。下面我们就来具体的进修下相关问题的解决方案。" c- s* `- V" c6 q% |. V- j/ |
  Java说话中有一个主要的特征是撑持Java多线程。Java多线程是java的一项高级手艺,它涉及到操作系统琅缦沔的常识,条理切近系统层面。对于通俗轨范员一般很少碰它。而且今朝就是在java EE(原本的J2EE)的相关框架里,对线程这个工具都是尽量回避。轨范员最理想的状况是专注营业逻辑,而不是天天想着线程这个工具怎么写。
8 m( U# O* C! |+ b/ O  思虑一个问题轨范的素质是什么?是CPU的指令序列的集结。到底什么挨次是轨范员编写的让计较机赋值,它就赋值、写个轮回它就轮回、写个分支语句它就分支、写个跳转它就跳转。每个指令流就是一个线程,并发执行多个指令流就是Java多线程。巨匠想,只有一个CPU怎么可能同时发出多个指令流呢?是的,并发只是“逻辑”上的,物理上是不成能的除非是两个以上的CPU。& N9 v; ]% W2 g0 H/ F) c  p
  Java多线程和传统的单线程的区别是因为各个线程的节制流彼此自力,使得各个线程之间的代码是乱序执行的,呈现了并发访谒带来的一切问题。正像是三个僧人的故事,僧人多了未必是好事。也就是适才说的,轨范员一般都不让他们碰这个工具。
5 N6 ~" V( t, p: v% R( [  在java中若何写线程呢,在java中就是很简单了。有两种体例:第一、担任java.lang.Thread第二、实现Runnable接口。实践:
* h: {; S4 ?) f. a9 ^( ?# A  担任Thread而重写了run()体例
) ?3 F/ E- Z# J0 b; q. f  1.public class Hello extends Thread{
. U* d& D1 W$ r) u0 j6 Q& y  2.int i;
( {8 [* h) k1 v) x) ^6 N  3.public void run(){* `( t( u  |6 }* C# h  ^! I) V1 I
  4.while(true){( ^+ J$ i$ G* R. k( \. }: h
  5.System.out.println("Hello "+i++);6 W$ j* s+ k- t: I
  6.if(i==10) break;, e) L) n" s! N" J$ ?5 G
  7.}}}
; Y5 g" j% C& W. h  8.public class HelloThread {
1 h3 _5 \. N. x* d3 b/ L  9.public static void main(String[] args){' m* Y) L* L7 c
  10.Hello h1 = new Hello();
3 v: {0 l. h, y1 I% C9 X  11.Hello h2 = new Hello();
# k' c) ^' [9 ~: ^  12.h1.start(); //用两个线程执行那10次轮回
. }1 j; w4 w0 w% W" J( A* T# X  13.h2.start();1 |6 e, i' q* Y
  14.}} 膳缦沔的例子是第一种体例,下面是第二种体例- J$ r3 {9 z* J! @1 [
  15.public class TestThread {& z* J1 l4 C. Z# R. y  X4 K
  16.public static void main(String args[]) {7 t& S- V% n0 U& R+ h. S# \0 t
  17.Xyz r = new Xyz();
. V9 `( u6 D3 `; |! C/ \  18.Xyz r1 = new Xyz();
8 Q+ p' s* E# K4 o  19.Thread t1 = new Thread(r);( T* }' K* l: T& }' H. j1 A
  20.Thread t2 = new Thread(r1);
" f6 o# g9 A) L, i6 c6 N: q  21.t1.start();//用两个线程执行那50次轮回
  T8 j2 Y2 n/ u) b  22.t2.start();8 n8 F0 B6 e2 Y7 D
  23.}} //实现Runnable接口
4 l( c/ O# C$ @) h7 Z! x% a& G  24.class Xyz implements Runnable {) [4 W& w' {3 l% b
  25.int i;
$ W7 r$ d. Y) P  26.public void run() {
# H9 p/ i6 S3 y( u( G& i  27.i = 0;
0 ~3 ]# b8 u- W; w. T  28.while (true) {$ \; @. ?/ h0 |
  29.System.out.println("Hello " + i++);  F5 s9 {# n6 q* J( d' i2 M3 s
  30.if ( i == 50 ) {
7 s. h4 R. [" d! \+ X$ ~: Q! T' W  31.break;
4 @: h; l1 o  G% h) m  32.}}}}
" ]1 j+ u2 O1 z* R" a) p  膳缦沔两种体例担任Thread类,Java多线程是斗劲简单的,代码也斗劲少。可是我们不倡导使用这种体例。而第二种实现Runnable接口,更合适面向对象思惟,Thread是把虚拟的CPU算作一个对象,封装了CPU的细节。可是Thread的机关线程的子类的体例中与CPU不相关,没有需要把CPU的细节都担任来。而实现Runnable则不影响java.lang.Thread的系统。而且便于其它类的担任。
# f! @; f8 X6 ~  Java多线程发的代码和数据的执行挨次杂乱,我们也需要自己调剂和节制它们。请看附加教程,线程调剂和并发。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-15 22:41 , Processed in 0.141391 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表