1. 继承Thread类的方式:
public class Thread01 extends Thread{
@Override
public void run() {
System.out.println(getName()+"线程执行了");
}
public static void main(String[] args) {
Thread01 thread = new Thread01();
thread.start();
}
}
2. 实现Runnable接口的方式:
public class Thread02 implements Runnable{
private static String name;
@Override
public void run() {
System.out.println(name+"线程执行了");
}
public static void main(String[] args) {
Thread t = new Thread(new Thread02());
name = t.getName();
t.start();
}
}
3. 使用匿名内部类的方式
public class Thread03{
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程执行了");
}
}).start();
}
}
4. 带有返回值的线程并且能抛出异常:
1. 自定义线程类使其实现Callable接口,泛型既是返回值类型
2. 在main方法中创建一个FutureTask对象,在创建一个Thread类,将FutureTask的对象作为参数传递给Thread构造方法
3. 调用开启线程的方法
4. 如获取返回值,则使用FutureTask对象.get()
public class Thread04 implements Callable<Integer>{
@Override
public Integer call() throws Exception {
System.out.println("线程正在计算...");
Thread.sleep(3000);
return 1;
}
public static void main(String[] args) {
FutureTask<Integer> task = new FutureTask<>(new Thread04());
Thread t = new Thread(task);
t.start();
try {
Integer integer = task.get();
System.out.println("执行结果是:"+integer);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5. 使用定时器的方式创建线程
public class Thread06{
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println(new Date());
}
}, 0, 1000);
}
}
6. 使用线程池的方式创建线程
ps:使用完要记得使用shutdown()方法关闭线程池
public class Thread05{
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
for(int i=0; i<100; i++){
executorService.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"线程执行");
}
});
}
executorService.shutdown();
}
}
7. 使用Lambda表达式来进行线程的处理
public class Demo7 {
public static void main(String[] args) {
List<Integer> values = Arrays.asList(10,20,30,40);
int res = new Demo7().add(values);
System.out.println("计算的结果为:" + res);
}
public int add (List<Integer> values) {
return values.parallelStream().mapToInt( i -> i * 2).sum();
}
}