java怎么创建一个线程

java怎么创建一个线程,第1张

Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类。 可以用如下方式用java中创建一个线程:

Tread thread = new Thread()

执行该线程可以调用该线程的start()方法:

thread.start()

编写线程运行时执行的代码有两种方式:一种是创建Thread子类的一个实例并重写run方法,第二种是创建类的时候实现Runnable接口。接下来我们会具体讲解这两种方法:

创建Thread的子类

创建Thread子类的一个实例并重写run方法,run方法会在调用start()方法之后被执行。例子如下:

public class MyThread extends Thread {

   public void run(){

     System.out.println("MyThread running")

   }

}

可以用如下方式创建并运行上述Thread子类

MyThread myThread = new MyThread()

myTread.start()

一旦线程启动后start方法就会立即返回,而不会等待到run方法执行完毕才返回。就好像run方法是在另外一个cpu上执行一样。当run方法执行后,将会打印出字符串MyThread running。

实现Runnable接口

第二种编写线程执行代码的方式是新建一个实现了java.lang.Runnable接口的类的实例,实例中的方法可以被线程调用。下面给出例子:

public class MyRunnable implements Runnable {

   public void run(){

    System.out.println("MyRunnable running")

   }

}

为了使线程能够执行run()方法,需要在Thread类的构造函数中传入 MyRunnable的实例对象。示例如下:

Thread thread = new Thread(new MyRunnable())

thread.start()

当线程运行时,它将会调用实现了Runnable接口的run方法。上例中将会打印出”MyRunnable running”。

(1)通过扩展Thread类来创建多线程

public static void main(String [] args){

        MutliThread m1=new MutliThread("Window 1")

        MutliThread m2=new MutliThread("Window 2")

        MutliThread m3=new MutliThread("Window 3")

        m1.start()

        m2.start()

        m3.start()

    }

}

class MutliThread extends Thread{

    private int ticket=100//每个线程都拥有100张票

    MutliThread(String name){

        super(name)//调用父类带参数的构造方法

    }

    public void run(){

        while(ticket>0){

            System.out.println(ticket--+" is saled by "+Thread.currentThread().getName())

        }

    }

}

(2)通过实现Runnable接口来创建多线程

 public static void main(String [] args){

        MutliThread m1=new MutliThread("Window 1")

        MutliThread m2=new MutliThread("Window 2")

        MutliThread m3=new MutliThread("Window 3")

        Thread t1=new Thread(m1)

        Thread t2=new Thread(m2)

        Thread t3=new Thread(m3)

        t1.start()

        t2.start()

        t3.start()

    }

}

class MutliThread implements Runnable{

    private int ticket=100//每个线程都拥有100张票

    private String name

    MutliThread(String name){

        this.name=name

    }

    public void run(){

        while(ticket>0){

            System.out.println(ticket--+" is saled by "+name)

        }

    }

}

package test

import java.util.*

public class Threadtest extends Thread{

int pauseTime

String name

public Threadtest(int time,String n){

pauseTime = time

name = n

}

public void run(){

Calendar now

now = Calendar.getInstance()

System.out.println(name+now.get(Calendar.MINUTE)+now.get(Calendar.SECOND))

try{

Thread.sleep(pauseTime)

}catch(Exception e){

e.getStackTrace()

}

Threadtest2 myt1 = new Threadtest2(5000,"threadin")

myt1.start()

}

public static void main(String[] args){

Threadtest myt1 = new Threadtest(2000,"thread1")

myt1.start()

Threadtest myt2 = new Threadtest(1000,"thread2")

myt2.start()

}

}

class Threadtest2 extends Thread{

int pauseTime

String name

public Threadtest2(int time,String n){

pauseTime = time

name = n

}

public void run(){

Calendar now

now = Calendar.getInstance()

System.out.println(name+now.get(Calendar.MINUTE)+now.get(Calendar.SECOND))

try{

Thread.sleep(pauseTime)

}catch(Exception e){

e.getStackTrace()

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11549104.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存