Java多线程(一)
一、多线程的概念
?
? ? 我们将正在执行的程序称为进程,现在的计算机大部分都支持多进程体制。例如我们在上网的同时,还可以边听音乐或者边看视频。在只有一个CPU的电脑上,是无法同时运行多个进程的,而是CPU轮流执行多个程序,看上去像是多个进程在同时执行。
?
? ? 上面是多进程的例子。但是,我们在程序内部,也可以同时运行多个任务,我们将在一个进程内部运行的每一个任务都称为一个线程(Thread)。在某个时间点上,CPU运行的线程只能有一个。
?
二、线程的使用范围
?
? ? 多线程应用无处不在,但应用最频繁的是游戏开发和网络编程。
?
三、如何创建线程:
?
? ? 在Java中,线程也是一种对象,但并非任何对象都可以成为线程,只有实现了Runnable接口的类才可以称为线程。我们可以通过两种方式来创建一个线程对象。
?
? ? (1)让一个类实现Runnable接口,实现该接口的run()方法
? ?在上面代码中,我们用ThreadSellTicket类模拟售票处的售票过程,run方法的每次循环都将总票数减一,模拟卖出一张车票,同时将该车票号打印出来,直到剩余票数为0为止。在ThreadTest类的main方法中,我们创建了一个线程对象,并重复启动四次,希望通过这个方式产生四个线程,结果怎样呢?
?
? ??从运行结果上看,我们发现其实只有一个线程在运行,这个结果告诉我们:一个线程对象只能启动一个线程,无论你调用多少遍start()方法,结果都只有一个线程。
? ?
? ?我们接着修改ThreadTest,在main方法中创建四个ThreadSellTicket对象:
? ? 在上面程序中,我们创建了四个线程,每个线程调用的是同一个ThreadSellTicket2对象中的run()方法,访问的是同一个对象中的变量(tickets)的实例,这个程序满足了我们的需求。
?
? ? 可见,实现Runnable接口相对于继承Thread类来说,有如下好处:
?
? ? 1、适合多个相同程序代码的线程去处理同一资源的情况,把线程同程序代码,数据有效分离,较好的体现了面向对象的设计思想。
?
? ? 2、可以避免由于Java的单继承特性带来的局限。我们经常碰到这样一种情况,即当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么,这个类就只能采用实现Runnable接口的方式。
?
?