java多线程应用开发(一)

       随话说万丈高楼平地起,在学习多线程开发之前,我们先来理解一些基本概念。

一,什么是线程?

线程(thread)是"进程"中某个单一顺序的控制流。也被称为轻量级进程。是程序执行流的最小单元,每个程序都至少有一个线程,如果程序只有一个线程,那么该线程就是程序本身。

二,线程与线程,线程与进程之间的关系:

一个进程可以包含多个线程,一个线程也可以创建或者撤销另一个线程,同一进程中的多个线程可以并发执行,线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈程序计数器为其执行上下文。

三,多线程的作用:

多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度,从而显著提高系统资源的利用率和吞吐量。

通过上面的描述相信大家对于线程已经有了初步的了解,下面就来用java代码实际演练,首先,多个线程之间怎么判断执行的先后顺序呢?除了默认的执行顺序之外,每一个线程其实都是可以通过设置优先级来控制线程的先后的先后执行的。JavaThread里面有一个setPriority的方法范围为110,默认值是5,数值越大优先级越高。

我们平时所写的程序如果没有新创建线程则一般都是单线程的,那么怎么写一个多线程的程序并判断它是不是同步执行多个方法的呢?看如下示例(泡茶程序):

publicclass Paocha extends Thread{

    //烧水

    publicvoid shaoshui(){

       try{

           //5秒钟的水

           System.out.println("开始烧水...");

           Thread.sleep(5000);

           System.out.println("烧水完成...");

       }catch(Exception e){

           e.printStackTrace();

       }

    }

    //洗杯子

    publicvoid wash(){

       try{

           for(int i=1;i<=10;i++){

              System.out.println("洗第"+i+"个杯子");

              Thread.sleep(1000);

           }

       }catch(Exception e){

           e.printStackTrace();

       }

    }

   

    publicvoid run(){

           shaoshui();

           wash();

        }

}

如果我们直接让这个线程启动,那么它肯定还是按单一方法的顺序执行的,另外要注意的是,我们要让一个线程启动应该是直接使线程start(),线程此时会自动执行它的run()方法,而不是简单的调用它的run()方法,不然这样也无法实现线程同步,如下修改的示例:publicclass Paocha extends Thread{

    String doSomething="";

 

    public Paocha(String doSomething){

       this.doSomething=doSomething;

    }

    //烧水

    publicvoid shaoshui(){

       try{

           //5秒钟的水

           System.out.println("开始烧水...");

           Thread.sleep(5000);

           System.out.println("烧水完成...");

       }catch(Exception e){

           e.printStackTrace();

       }

    }

    //洗杯子

    publicvoid wash(){

       try{

           for(int i=1;i<=10;i++){

              System.out.println("洗第"+i+"个杯子");

              Thread.sleep(1000);

           }

       }catch(Exception e){

           e.printStackTrace();

       }

    }

   

    publicvoid run(){

       if(doSomething=="water"){

           shaoshui();

       }

       elseif(doSomething=="wash"){

           wash();

       }

    }

}

我们再写一个类来启动它看一下效果:

publicclass MyThread {

    publicstaticvoid main(String args[]){

       Paocha shaoshui=new Paocha("water");

       Paocha wash=new Paocha("wash");

       shaoshui.start();

       wash.start();

    }

}

多线程编程是应用编程开发中的重点,在了解了基本的使用之后我们再继续深入。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值