---------------------- android培训java培训、期待与您交流! ----------------------

java学习日记(5)——创建线程的两种基本方法

      java多线程的学习还是很有意思的,都是涉及到了一些实际问题,比如售票应该怎么处理,以及一些生产消费问题等,不过我感
觉在这个知识点的学习过程是先易后难的,前半部分看毕老师的讲的听得还是容易懂的,第一种实现方法就是建立一个类然后实
现Thread,最后一定要覆盖run方法,把要操作的代码写进去,然后建立对象调用start方法,这样一个线程就建立好了,然后建
立4个线程来售票,不过这种方法不适合售票,因为100张票的数据本来是共享的,可是4个线程都有100张了,虽然可以用static
来修饰,但是会影响内存,所以就直接引出来了第二种方法:实现Runable接口,这种方法不仅实现了数据的共享,还避免了单
继承的局限性。

两种方式区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。

下面是简单的售票例子:需求:简单的卖票程序。多个窗口同时买票。
class Ticket implements Runnable//extends Thread
{
  private int tick = 100;
  public void run()
  {
    while(true)
    {
      if(tick>0)
      {
        System.out.println(Thread.currentThread().getName()+"....sale : "+ tick--);
      }
    }
  }
}


class TicketDemo
{
public static void main(String[] args)
{

Ticket t = new Ticket();

Thread t1 = new Thread(t);//创建了一个线程;
Thread t2 = new Thread(t);//创建了一个线程;
Thread t3 = new Thread(t);//创建了一个线程;
Thread t4 = new Thread(t);//创建了一个线程;
t1.start();
t2.start();
t3.start();
t4.start();
      第二种方法的步骤是
1,定义类实现Runnable接口
2,覆盖Runnable接口中的run方法。将线程要运行的代码存放在该run方法中。
3,通过Thread类建立线程对象。
4,将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
5,调用Thread类的start方法开启线程并调用Runnable接口子类的run方法。
另外 为什么要将Runnable接口的子类对象传递给Thread的构造函数。因为,自定义的run方法所属的对象是Runnable接口的
子类对象。所以要让线程去指定指定对象的run方法。就必须明确该run方法所属对象。

      我们只有把上面的这些要点掌握清楚后,才会对线程的安全性和死锁之类的比较难点的概念会有更好的理解的。

posted on 2012-02-03 02:09  苏格拉底的弟子  阅读(176)  评论(0编辑  收藏  举报

---------------------- android培训java培训、期待与您交流! ----------------------