Java项目中创建线程的方法有哪些

  

Java项目中创建线程的方法有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强> Java创建线程的两个方法

Java提供了线程类线程来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是线程类或其子类的实例对象。每个线程对象描述了一个单独的线程。要产生一个线程,有两种方法:

◆需要从Java.lang.Thread类派生一个新的线程类,重载它的运行()方法;

◆实现Runnalbe接口,重载Runnalbe接口中运行的()方法。

在Java中,类仅支持单继承,也就是说,当定义一个新的类的时候,它只能扩展一个外部类。这样,如果创建自定义线程类的时候是通过扩展线程类的方法来实现的,那么这个自定义类就不能再去扩展其他的类,也就无法实现更加复杂的功能,因此,如果自定义类必须扩展其他的类,那么就可以使用实现运行的接口的方法来定义该类为线程类,这样就可以避免Java单继承所带来的局限性。

还有一点最重要的就是使用实现运行的接口的方式创建的线程可以处理同一资源,从而实现资源的共享。

<强>(1)通过扩展线程类来创建多线程

假设一个影院有三个售票口,分别用于向儿童,成人和老人售票。影院为每个窗口放有100张电影票,分别是儿童票,成人票和老人票。三个窗口需要同时卖的票,而现在只有一个售票员,这个售票员就相当于一个CPU,三个窗口就相当于三个线程。通过程序来看一看是如何创建这三个线程的。

公共类MutliThreadDemo {
  公共静态void main (String [] args) {
  MutliThread m1=new MutliThread(“窗口1“);
  MutliThread m2=new MutliThread(“窗口2“);
  MutliThread m3=new MutliThread(“窗口3“);
  m1.start ();
  m2.start ();
  m3.start ();
  }
  }
  类MutliThread扩展线程{
  私人int票=100;//每个线程都拥有100张票
  MutliThread(字符串名称){
  超级(名字);//调用父类带参数的构造方法
  }
  公共空间run () {
  而(ticket> 0) {
  System.out.println(机票+“;由“售出+ Thread.currentThread () . getname ());
  }
  }
  }

,,程序中定义一个线程类,它扩展了线程类。利用扩展的线程类在MutliThreadDemo类的主方法中创建了三个线程对象,并通过开始()方法分别将它们启动。

从结果可以看的到,每个线程分别对应100张电影票,之间并无任何关系,这就说明每个线程之间是平等的,没有优先级关系,因此都有机会得到CPU的处理。但是结果显示这三个线程并不是依次交替执行,而是在三个线程同时被执行的情况下,有的线程被分配时间片的机会多,票被提前卖完,而有的线程被分配时间片的机会比较少,票迟一些卖完。

可见,

<强>(2)通过实现运行的接口来创建多线程

公共类MutliThreadDemo2 {
  公共静态void main (String [] args) {
  MutliThread m1=new MutliThread(“窗口1“);
  MutliThread m2=new MutliThread(“窗口2“);
  MutliThread m3=new MutliThread(“窗口3“);
  线程t1=新线程(m1);
  线程t2=新线程(m2);
  线程t3=新线程(m3);
  t1.start ();
  t2.start ();
  t3.start ();
  }
  }
  类MutliThread实现Runnable {
  私人int票=100;//每个线程都拥有100张票
  私人字符串名称;
  MutliThread(字符串名称){
  this.name=名称;
  }
  公共空间run () {
  而(ticket> 0) {
  System.out.println(机票+“;由“售出+名字);
  }
  }
  }

由于这三个线程也是彼此独立,各自拥有自己的资源,即100张电影票,因此程序输出的结果和(1)结果大同小异,均是各自线程对自己的100张票进行单独的处理,互不影响。

可见,只要现实的情况要求保证新建线程彼此相互独立,各自拥有资源,且互不干扰,采用哪个方式来创建多线程都是可以的,因为这两种方式创建的多线程程序能够实现相同的功能。

由于这三个线程也是彼此独立,各自拥有自己的资源,即100张电影票,因此程序输出的结果和例4.2.1的准备结果大同小异,均是各自线程对自己的100张票进行单独的处理,互不影响。

可见,只要现实的情况要求保证新建线程彼此相互独立,各自拥有资源,且互不干扰,采用哪个方式来创建多线程都是可以的,因为这两种方式创建的多线程程序能够实现相同的功能。

Java项目中创建线程的方法有哪些