要想使用多线程,咱们就有必要先了解下多线程,在不久以前,我写过相关的文章,在这简单回顾下,一个程序加上数据,就构成了一个进程,就好比快递公司是个进程,快递公司的方法就是送快递,快递员好比线程,他们都是送快递,只是负责区域不同,那么最简单的多线程是怎么实现的呢?
简单说实现多线程有很多种方法,而java这里主要有两种,一种是继续Thread类,另外一种是实现Runable接口,我们今天就先做个简单的demo入门:
<span style="font-size:18px;">/** * 多线程测试类 * * @author 许恕 * @version 3.0.0 , 2015年6月25日 上午10:50:22 */ public class HelloWorld extends Thread { //标示这个类的名字 private String name; /** * 无参构造函数 */ public HelloWorld(){ } /** * 有参构造函数:将类的唯一标识符传入对象 * @param strName 类的唯一标示符 */ public HelloWorld(String strName){ name=strName; } /** * 多线程规定好的方法,如果是继承Thread类则必须实现这个方法 */ public void run(){ for(int i=0;i<8;i++){ System.out.println(name+":这是第"+i+"次调用;"); } } }</span>
<span style="font-size:18px;">/** * 实验多线程的客户端 * * @author 许恕 * @version 3.0.0 , 2015年6月25日 上午10:53:35 */ public class client_start { /** * 测试多线程的主方法 * * @param args */ public static void main(String[] args) { //实例两个多线程类,许恕和李龙 HelloWorld xvshu = new HelloWorld("许恕"); HelloWorld lilong = new HelloWorld("李龙"); //如果调用父类(Thread)中的start方法,是多线程执行的 System.out.println("调用父类(Thread)中的start:开始"); xvshu.start(); lilong.start(); System.out.println("调用父类(Thread)中的start:结束"); } }</span>
在共享数据的基础上,实现多个窗口卖票:
需求:
共有N个窗口卖票,票数不变,一个窗口一个线程,各自卖票,卖完为止!
多线程代码:
<span style="font-size:18px;">/** * 多线程测试类:卖票 * * @author 许恕 * @version 3.0.0 , 2015年6月25日 上午10:50:22 */ public class Ticket implements Runnable { //现在一共有多少票 private int ticketNum; /** * 无参构造函数 */ public Ticket(){ } /** * 有参构造函数:将一共有多少票传入对象 * @param strName 类的唯一标示符 */ public Ticket(int TicketNum){ ticketNum=TicketNum; } /** * 多线程规定好的方法,如果是继承Thread类则必须实现这个方法 */ public void run(){ while(ticketNum>0){ try{ //某窗口买出一张票 System.out.println(Thread.currentThread().getName()+"正在卖票,剩余票数:"+ticketNum--); //程序等待时间数 long sleepTime = 1000; //程序等待1秒 Thread.sleep(sleepTime); }catch(Exception e){ e.printStackTrace(); } } } }</span>
你想到的,别人一定想到了,这是先定义别人是聪明,别人都给咱们解决了,解决问题之前要先宏观了解问题,然后相信每个开发猿,都为了服务大众,做了很多工作,包括这次一样,生活和代码,真实真的很想,越来越有体会,代码越深入,越生活!