Thread实现方式
package com.thread;
//实现类继承Thread线程类
public class ThreadDemo extends Thread{
//重写run方法
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(getName() +"--"+ i);
}
}
}
package com.thread;
public class ThreadMain {
public static void main(String[] args) {
//创建实体类
ThreadDemo demo = new ThreadDemo();
ThreadDemo demo1 = new ThreadDemo();
//调用start方法
demo.start();
demo1.start();
}
}
运行main方法可以看到开启的二条线程交替执行
Runable
package com.thread;
//实现Runable接口
public class RunableDemo implements Runnable{
private String name;
public RunableDemo(String name) {
this.name = name;
}
public RunableDemo() {
}
//重写run方法
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(name + ":"+i);
}
}
}
package com.thread;
public class RunableMain {
public static void main(String[] args) {
RunableDemo runableDemo = new RunableDemo("小花");
RunableDemo runableDemo1 = new RunableDemo("小红");
Thread thread = new Thread(runableDemo);
Thread thread1 = new Thread(runableDemo1);
thread.start();
thread1.start();
}
}
运行main方法可以看到开启的二条线程交替执行,这里我设置了线程名称小花和小红。
Callable可带返回值的方式
package com.thread;
import java.util.concurrent.Callable;
public class CallableDemo implements Callable<String> {
@Override
public String call() throws Exception {
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
return "结束";
}
}
package com.thread;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class CallableMain {
public static void main(String[] args) throws ExecutionException, InterruptedException {
CallableDemo callableDemo = new CallableDemo();
//可以获取线程执行完后的返回结束。也可以作为构造方法的参数传给Thread.
FutureTask<String> ft = new FutureTask<>(callableDemo);
Thread thread = new Thread(ft);
thread.start();
System.out.println(ft.get());//接收返回值
}
}
运行main方法最后返回结束。
使用线程的注意事项
操作共同数据的时候必需使用锁
synchronized (锁对象){
业务处理代码
}
也可以使用锁Lock的方式,参考ReentrantLock