`

JAVA多线程

阅读更多

本篇文章介绍Java多线程的必备知识,主要包括以下三个方面:


什么是线程,什么是进程?

线程和进程有什么区别?

线程启动(两种方式,并举例对比说明)

       应用篇( 以考试系统为例)


什么是线程,什么是进程?

       线程是一个程序内部的顺序控制流,运行中的程序就是进程,进程是静态的。

 

 

线程和进程有什么区别?

       每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。

       线程可以看成是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。

 

     多进程:在操作系统中能同时运行多个任务(程序)。

     多线程:在同一应用中有多个顺序流同时执行。

 

 

如何启动多线程?

      有两种方式:一种是直接继承Thread类,另一种是实现Runnable接口。

举个例子来说明一下,用模拟铁路售票系统,实现四个售票点发售某日某次列车的100张车票,一个售票点用一个线程表示。

 

 1)继承Thread

 

  1. <span style="font-family:Verdana;"><span style="font-size:18px;">public class ThreadDome1{  
  2.    public static void main(String[] args){  
  3.         
  4.       new ThreadTest().start();  
  5.       new ThreadTest().start();  
  6.       new ThreadTest().start();  
  7.       new ThreadTest().start();  
  8.    }  
  9. }  
  10.   
  11. class ThreadTest extends Thread{  
  12.    private int ticket =100;  
  13.    public void run(){  
  14.        while(true){  
  15.          if(ticket > 0){  
  16.            System.out.println(Thread.currentThread().getName()+"is saling ticket" + ticket --);  
  17.          }else{  
  18.             break;  
  19.          }  
  20.        }  
  21.    }  
  22. }  
  23. </span></span>  


实现效果:

        


      创建四个进程,从运行结果来看,四个线程各自卖自己的100张票,那么这样就会有很多重复的票。而我们需要多个线程去处理同一个资源即多个窗口卖不同的票,我们需要四个线程卖100张票,如下,

 

2)实现Runnable接口

  

  1. <span style="font-family:Verdana;"><span style="font-size:18px;">public class RunnableDemo{  
  2.    public static void main(String[] args){  
  3.       ThreadTest t = new ThreadTest();  
  4.       new Thread(t).start();  
  5.       new Thread(t).start();  
  6.       new Thread(t).start();  
  7.       new Thread(t).start();  
  8.    }  
  9. }  
  10.   
  11. class ThreadTest implements Runnable{  
  12.    private int ticket =100;  
  13.    public void run(){  
  14.        while(true){  
  15.          if(ticket > 0){  
  16.            System.out.println(Thread.currentThread().getName()+"is saling ticket" + ticket --);  
  17.          }else{  
  18.             break;  
  19.          }  
  20.        }  
  21.    }  
  22. }  
  23. </span></span>  


实现效果:

        


      根据结果看出,四个线程,每个线程调用的是同一个ThreadTest对象中的run()方法,访问的是同一个对象中的变量的实例,查看输出结果,每个售票口卖出不同的票,实现了四个售票点同时卖某日某次列车车票的情况。

 

Runnable接口的实现

     当线程被构造时,需要的代码和数据(代码和数据是共享的)通过一个对象作为构造函数实参传递进去,这个对象就实现了Runnable接口。

 


 3)总结例子     

      通过上面的例子可以看出实现Runnable接口相对于继承Thread类来说更适合多个相同程序代码的线程去处理同一资源的情况。

 

      多线程去处理同一资源,提高了效率,不用总是处于等待状态,而且CPU的占用会很少,这种情况下多线程比单线程更有优势。

 

       Thread类是Java的单继承,同一个类不能同时有两个父类,所以就会出现即使是创建了四个线程,执行后是一个线程在工作;而接口是用来实现的,所以可以有很多类去实现这个接口,这样创建四个线程,四个线程就会处理同一资源。


应用篇

 

    多线程应用到考试系统抽题中,可以这样考虑,把每个题型看成一个线程,那么抽题的时候就可以同时抽,提高效率。如下图:

 

      第一幅图:利用单线程,单线程就需要先抽完选择题,然后抽填空题,最后抽判断题,依次执行

    

       

           如上图,单线程所需要的时间是30


    第二幅图:利用多线程,把每个题型看做一个线程,那么一张试卷有几个题型就创建几个线程,这几个线程同时工作,如下图,选择题,填空题,判断题同时工作,那么抽出一张试卷需要的时间仅仅是15的时间。



    这就是2的差距,那么上千人考试的话,时间差距会是2000倍。这样就能减轻服务器压力,提高效率和正确率。

 

 

本文转自:http://blog.csdn.net/liutengteng130/article/details/20036517

分享到:
评论

相关推荐

    Java多线程设计模式上传文件

    Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    java多线程进度条

    java多线程进度条

    java多线程ppt

    java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题

    深入浅出 Java 多线程.pdf

    在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的优点、多线程编程的缺点、多线程编程的应用场景、多线程编程的实现方法等内容。 一、多线程编程的基本概念 多线程编程是指...

    java 多线程操作数据库

    一个java 多线程操作数据库应用程序!!!

    java多线程经典案例

    java多线程经典案例,线程同步、线程通信、线程阻塞等经典案例

    Java多线程编程实战指南(核心篇)

    Java多线程编程实战指南(核心篇) 高清pdf带目录 随着现代处理器的生产工艺从提升处理器主频频率转向多核化,即在一块芯片上集成多个处理器内核(Core),多核处理器(Multicore Processor)离我们越来越近了――如今...

    Java多线程知识点总结

    该文档总结了Java多线程相关的知识点,分享给大家,简单易懂!

    java多线程的讲解和实战

    详细的讲解了java多线程的原理,并配有代码进行实战,适合java初学者和想对多线程有进一步了解的人。

    java多线程通信图解

    一张图方便理解和掌握java 多线程之间通信的实质 java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,...

    java多线程处理数据库数据

    java多线程处理数据库数据,使用并发包,无框架,可批量处数据库数据,进行增删改。。等等操作。

    java多线程,对多线程,线程池进行封装,方便使用

    java多线程,对多线程,线程池进行封装,方便使用

    Java多线程编程经验

    现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。...本文档提供Java多线程编程经验,方便广大Java爱好者研究学习Java多线程

    java多线程处理大数据

    java多线程处理大数据,可根据配置的线程数,任务去调度处理

    java多线程并发

    java多线程并发的在新窗口

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 9.6 线程同步 9.7 在同步方法中使用wait()、notify 和notifyAll()方法 9.8 挂起、恢复和终止线程 ...

    java多线程核心技术

    资深Java专家10年经验总结,全程案例式讲解,首本全面介绍Java多线程编程技术的专著 结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的核心技术与应用实践 Java多线程无处不在,如...

    java多线程实现大批量数据导入源码

    java多线程实现大批量数据切分成指定份数的数据,然后多线程处理入库或者导出,线程的个数和每份数据的数量都可以控制

    java多线程查询数据库

    java多线程并发查询数据库,使用线程池控制分页,并发查询。

Global site tag (gtag.js) - Google Analytics