java创建线程(java创建线程的四种方式)

本篇文章给大家谈谈java创建线程,以及java创建线程的四种方式对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java百万并发任务怎么开线程

java百万并发任务用继承Thread类或实现Runnable接口开线程。

1、继并局世承Thread类:重写腊腔run方法,在run方法中定义需要执行的任务,创建好了线程类之后,创建线程对象,然后通过start()方法去启动线程。

2、实现Runnable接口:实现Runnable接口绝肢必须重写其run方法。

[img]

创建线程有几种不同方式,最常用那种 Java面试题

有三种方式可以用来创建线程:

继承Thread类

实现Runnable接口

应用程序可以使用Executor框架来创建线程池

实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应晌迟用设计中已经继承了别的好哗对象友谨行的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。

JAVA线程能创建线程吗

Java有三种创建线程的方式,分别是继承Thread类、实现Runable接口和使用线程池

1、继承Thread类

使用该方式创建及使用线程需按以下三个步骤:

(1)定义Thread类的子类,并重写父类的run()方法,方法里的内容就是线程所要执行的任务;

(2)创建子类的实例,即生成线程的实例对象;

(3)调用现成的start()方法来启动线程。

public class SubThread extends Thread {

private int ticket = 100; private String name; public ImplThread(String name) { this.name = name;

} public void run() { while (k 0){

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

} try{

sleep((int)Math.random() * 10);

}catch (InterruptedException e){

e.printStackTrace();

}

} public static void main (String []args){

SubThread t1 = new SubThread("A");

SubThread t2 = new SubThread("B");

t1.start();

t2.start();

}

}1234567891011121314151617181920212223

2、实现Runnable接口

(1)定义实现Runnable接口的实现类,并重写run()方法;

(2)创建Runnable接口实现类的实例,并将该实例作为参数传到Thread类的构造方法中来创建Thread对象,该Thread对象才是真正的线程对象;

(3)调用现成的start()方法来启动线程。

public class ImplThread implements Runnable {

private int ticket = 100; private String name; public ImplThread(String name) { this.name = name;

} public void run() { while (k 0){

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

} try{

sleep((int)Math.random() * 10);

}catch (InterruptedException e){

e.printStackTrace();

}

} public static void main (String []args){

ImplThread i1 = new ImplThread("A");

ImplThread i2 = new ImplThread("B");

Thread t1 = new Thread(i1);

Thread t2 = new Thread(i2);

t1.start();

t2.start();

}

}12345678910111213141516171819202122232425

上面这段代码跟继承Thread类的线程代码呈现的效果是一样的,虽然执行的是相同的代码,但彼此相互独立,且各自拥有自己的资源,互不干扰。

但是,在某些场景,我们希望各线程能共享资源,这时候就只能扩展Runnable接口了。

public class ImplThread implements Runnable {

private int ticket = 100; public void run() { while (k 0){

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

} try{

sleep((int)Math.random() * 10);

}catch (InterruptedException e){

e.printStackTrace();

}

} public static void main (String []args){

ImplThread i = new ImplThread();

Thread t1 = new Thread(i);

Thread t2 = new Thread(i);

t1.start();

t2.start();

}

}1234567891011121314151617181920

这时候,线程t1和t2共享这100张票。

3、使用线程池

使用线程池并不是创建线程,而是对线程进行管理。Excetor为线程池超级接口,该接口中定义了一个execute(Runnable command)方法,用来执行传递过来的线程,ExecutorService就是我们所说的线程池,它继承了Excetor接口。如何创建线程池呢?Java提供了Executors类,该类有四个静态方法分别可以创建不同类型的线程池(ExecutorService)。

Executors.newCachedThreadPool() 创建可变大小的线程池

Executors.newFixedThreadPool(int number) 创建固定大小的线程池

Executors.newSingleThreadPool() 创建单任务线程池

Executors.newScheduledThreadPool(int number) 创建延迟线程池

import java.util.concurrent.Executors;

import java.util.concurrent.ExecutorService;

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

//创建一个可重用固定线程数的线程池 ExecutorService pool = Executors.newFixedThreadPool(2);

//创建实现了Runnable接口对象,Thread对象当然也实现了Runnable接口 Thread t1 = new MyThread();

Thread t2 = new MyThread();

Thread t3 = new MyThread();

Thread t4 = new MyThread();

Thread t5 = new MyThread();

//将线程放入池中进行执行 pool.execute(t1);

pool.execute(t2);

pool.execute(t3);

pool.execute(t4);

pool.execute(t5);

//关闭线程池 pool.shutdown();

}

}

class MyThread extends Thread{ @Override

public void run() {

System.out.println(Thread.currentThread().getName()+"正在执行。。。");

}

} 12345678910111213141516171819202122232425262728

输出:

pool-1-thread-1正在执行。。。

pool-1-thread-1正在执行。。。

pool-1-thread-1正在执行。。。

pool-1-thread-1正在执行。。。

pool-1-thread-2正在执行。。。

Process finished with exit code 0

可见,线程得到了重用,线程池里只有两个线程在执行。

java创建线程的方式有几种?

java创建线程的方枝察式有三种

第一种是继承Thread类 实现方法run() 不可以抛异常 无返回值

第二种是实现Runnable接口 实现方法run() 不可以帆搭戚抛异常 无返回值

第三种是态陵实现CallableT接口,接口中要覆盖的方法是 public T call() 注意:此方法可以抛异常,而前两种不能 而且此方法可以有返回值

第三种如何运行呢 Callable接口在util.concurrent包中,由线程池提交

import java.util.concurrent.*;

ExecutorService e = Executors.newFixedThreadPool(10); 参数表示最多可以运行几个线程

e.submit(); 这个里面参数传 实现Callable接口那个类的对象

java怎么动态的创建线程

JAVA中,线程就是做源动态的

最简单纯胡厅地,这样就可做隐以

new Thread(){

public void run(){

System.out.println(new java.util.Date());

try{Thread.sleep(1000); }catch(InterruptedException ex){}

}

}.start();

~

关于java创建线程和java创建线程的四种方式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表