服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java初学者实践教程25-多线程

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

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

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

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

    实践:

//继承thread而重写了run()方法

public class hello extends thread{

    int i;

    public void run(){

       while(true){

           system.out.println("hello "+i++);

           if(i==10) break;

       }}}

public class hellothread {

    public static void main(string[] args){

       hello h1 = new hello();

       hello h2 = new hello();

       h1.start(); //用两个线程执行那10次循环

       h2.start();

}} 上面的例子是第一种方法,下面是第二种方法

public class testthread {

  public static void main(string args[]) {

    xyz r = new xyz();

    xyz r1 = new xyz();

    thread t1 = new thread(r);

    thread t2 = new thread(r1);

    t1.start();//用两个线程执行那50次循环

    t2.start();

 }} //实现runnable接口

class xyz implements runnable {

  int i;

  public void run() {

    i = 0;

    while (true) {

      system.out.println("hello " + i++);

      if ( i == 50 ) {

    break;

}}}} 

多个源码打包下载

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

    线程并发的代码和数据的执行顺序混乱,我们也需要自己调度和控制它们。请看附加教程,线程调度和并发。

java初学者实践教程26-网络程序

扫描关注微信公众号