线程的创建是我们在了解了线程的概念之后,开始学习线程的第一步,线程的创建根据不同的情况可以选择不同的创建方式。一般情况下,创建线程有4种方式。
Thread 类实现了 Runnable 接口并定义了操作线程的一些方法,我们可以通过创建类时继承 Thread类来创建一个线程。
具体实现:
调用步骤:
//创建线程类
public class ThreadDemo extends Thread {
//重写run()方法
@Override
public void run() {
for(int i = 0;i<1000;i++) {
System.out.println("Thread::"+i);
}
}
}
/***********************************************************************/
//调用线程
//创建线程对象
ThreadDemo t1 = new ThreadDemo();
//启动线程
t1.start();
run()方法中是线程的具体逻辑操作,
start()是一个native本地方法,通过操作系统启动一个线程。
通过实现Runnable 接口来创建线程类 RThread,但是使用的时候,仍需要创建Thread 对象,把RThread的对象当成参数传入。
具体操作:
调用步骤:
//实现Runnable 接口创建线程类 RThread
public class RThread implements Runnable {
@Override
//重写run()方法
public void run() {
for(int i = 0;i<1000;i++) {
System.out.println("Thread::"+i);
}
}
}
/***********************************************************************/
//调用线程
//创建RThread 类的对象 rThread
RThread rThread = new RThread();
//创建Thread类对象,并把rThread当成参数传入,相当于对rThread进行了封装。
Thread t2 = new Thread(rThread);
//通过start()方法启动线程
t2.start();
我们需要在主线程中开启多个线程去执行一个任务,然后收集各个线程的返回结果并将最终结果进行汇总,这是就需要用到 Callable 接口。
具体步骤:
调用步骤:
//通过实现Callable接口来创建线程类
public class CThread implements Callable<String> {
private String name;
public CThread(String name ) {
this.name = name;
}
//重写call()方法
@Override
public String call() throws Exception {
return name;
}
}
/***********************************************************************/
//调用线程
//创建线程池
ExecutorService pool = Executors.newFixedThreadPool(5);
//创建接收结果的列表集合
List<Future> list = new ArrayList<Future>();
for(int i = 0;i<5;i++) {
//创建线程对象
Callable c = new CThread("线程"+i);
//将线程对象提交到线程池中,并将返回结果接收
Future future = pool.submit(c);
System.out.println("线程"+i+"已经加入线程池");
//将返回结果加入集合
list.add(future);
}
//关闭线程池
pool.shutdown();
//打印返回结果
for (Future future : list) {
try {
System.out.println(future.get().toString());
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我们可以利用缓存策略使用线程池来创建线程
具体创建:
public class EThread {
public static void main(String[] args) {
//创建线程池
ExecutorService threadPool = Executors.newFixedThreadPool(10);
for(int i = 0;i<10;i++) {
//调用execute()方法创建线程
//采用匿名内部类的方法,创建Runnable对象,并重写run()方法
threadPool.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
});
}
}
}
以上就是创建线程的4种方式,然而,这只是我们学习线程知识的起点,想要学习更多更全面的Java线程知识还是得到动力节点在线的免费视频课程观看优秀讲师的精彩讲解。
提枪策马乘胜追击04-21 20:01
代码小兵92504-17 16:07
代码小兵98804-25 13:57
杨晶珍05-11 14:54