第一种 继承Thread类
public class ThreadDemo1 extends Thread{
@Override
public void run() {
System.out.println("继承Thread来的run");
}
public static void main(String[] args) {
ThreadDemo1 td1 = new ThreadDemo1();
td1.start();
ThreadDemo1 td2 = new ThreadDemo1();
td2.start();
}
}
第二种 实现Runnable接口
public class ThreadDemo2 implements Runnable{
@Override
public void run() {
System.out.println("我是实现Runnable接口来的线程");
}
public static void main(String[] args) {
ThreadDemo2 td1 = new ThreadDemo2();
Thread th1 = new Thread(td1);
th1.start();
ThreadDemo2 td2 = new ThreadDemo2();
Thread th2 = new Thread(td1);
th2.start();
}
}
第三种 实现Callable接口
public class ThreadDemo4 implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int i = 0;
for (; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
return i;
}
public static void main(String[] args) {
ThreadDemo4 td1 = new ThreadDemo4();
FutureTask<Integer> ft = new FutureTask<>(td1);
ExecutorService ser = Executors.newFixedThreadPool(2);
ser.submit(ft);
try {
Integer result = ft.get();
System.out.println(result);
System.exit(0);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
使用实例(三个窗口买火车票)
public class LxTwo implements Runnable{
static int num=20;
static String zz="z";
@Override
public void run() {
while (true){
try {
Thread.sleep(2000);
synchronized (zz){
if (num>0){
System.out.println(Thread.currentThread().getName()+"购买成功!票号为"+num);
num--;
}else {
System.out.println("票没了老铁!");
System.exit(0);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
LxTwo lo1 = new LxTwo();
Thread td1 = new Thread(lo1);
td1.start();
LxTwo lo2 = new LxTwo();
Thread td2 = new Thread(lo2);
td2.start();
LxTwo lo3 = new LxTwo();
Thread td3 = new Thread(lo3);
td3.start();
}
}
写的不好勿喷 有问题欢迎大家来提 我们一起进步!加油!!