方式一:继承Thread类
MyThread.java
package cn.itcast.createThread;
/**
* 方式一: 继承Thread类
* 步骤:
* a:自定义MyThread类继承Thread类
* b:MyThread类里面重写run方法
* 为什么是run方法?:
* 不是类 中所有的代码都需要被线程执行的,
* 而这个时候,为了区分哪些代码能够被线程执行,java
* 提供了Thread类中的run用来包含那些被线程执行的代码。
* c:创建对象
* d:启动线程
*/
public class MyThread extends Thread {
public MyThread(){
super();
}
public MyThread(String name){
super(name);
}
@Override
public void run() {
for(int x=0;x<100;x++){
System.out.println(getName() + ":" + x);
}
}
}
CreateThreadTest.java
package cn.itcast.createThread;
public class CreateThreadTest {
public static void main(String[] args) {
//给线程取名字 方法一:
MyThread my1 = new MyThread();
MyThread my2 = new MyThread();
my1.setName("math");
my2.setName("english");
my1.start();
my2.start();
//给线程取名字 方法二:
// MyThread my1 = new MyThread("math");
// MyThread my2 = new MyThread("english");
// my1.start();
// my2.start();
// 获取main线程的线程名称
// System.out.println(Thread.currentThread().getName());
}
}
方式二:实现Runable接口
MyThread.java
package cn.itcast.createThread;
public class MyThread implements Runnable {
@Override
public void run() {
for(int x=0;x<100;x++){
System.out.println(Thread.currentThread().getName() + ":" + x);
}
}
}
CreateThreadTest.java
package cn.itcast.createThread;
public class CreateThreadTest {
public static void main(String[] args) {
MyThread mt = new MyThread();
Thread my1 = new Thread(mt);
Thread my2 = new Thread(mt);
my1.start();
my2.start();
}
}
方式三:实现Callable接口
注意: 只有在线程池中才可以使用,这个接口具有返回值
MyThread.java
package cn.itcast.createThread;
import java.util.concurrent.Callable;
public class MyThread implements Callable<Integer> {
private int number;
public MyThread(int number) {
this.number = number;
}
@Override
public Integer call() throws Exception {
int sum = 0;
for (int x = 1; x <= number; x++) {
sum += x;
}
return sum;
}
}
CreateThreadTest.java
package cn.itcast.createThread;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/*
* 多线程实现的方式3:
* A:创建一个线程池对象,控制要创建几个线程对象。
* public static ExecutorService newFixedThreadPool(int nThreads)
* B:这种线程池的线程可以执行:
* 可以执行Runnable对象或者Callable对象代表的线程
* 做一个类实现Runnable接口。
* C:调用如下方法即可
* Future<?> submit(Runnable task)
* <T> Future<T> submit(Callable<T> task)
* D:我就要结束,可以吗?
* 可以。
*/
public class CreateThreadTest {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 创建线程池对象
ExecutorService pool = Executors.newFixedThreadPool(2);
// 可以执行Runnable对象或者Callable对象代表的线程
Future<Integer> f1 = pool.submit(new MyThread(100));
Future<Integer> f2 = pool.submit(new MyThread(200));
// V get()
Integer i1 = f1.get();
Integer i2 = f2.get();
System.out.println(i1);
System.out.println(i2);
// 结束
pool.shutdown();
}
}