JAVA三种创建线程方式
一、什么是线程?
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位,可以使用多线程对进行运算提速。
比如,如果⼀个线程完成⼀个任务要100毫秒,那么10个线程完成改任务只需10毫秒。
二、三种线程创建方式
1 、继承Thread类
public class ExteThred extends Thread {
public static void main(String[] args) {
new ExteThred().start();//创建线程1
new ExteThred().start();//创建线程2
}
@Override
public void run() {
for(int i=0;i<=50;i++){
System.out.println(Thread.currentThread().getName()+"======"+i);
}
}
}
2 、实现Runnable接口
public class ImplRunnable implements Runnable {
public static void main(String[] args) {
ImplRunnable impRunnable = new ImplRunnable();
new Thread(impRunnable,"Thread1").start();//创建线程1
new Thread(impRunnable,"Thread2").start();//创建线程2
}
@Override
public void run() {
for(int i=0;i<=50;i++){
System.out.println(Thread.currentThread().getName()+"======"+i);
}
}
}
3 、第三种,通过Callable和Future接口创建线程
public class ThirdThreadImp {
public static void main(String[] args) {
Date myDate = new Date(System.currentTimeMillis());
//这里call()方法的重写是采用lambda表达式,没有新建一个Callable接口的实现类
FutureTask<Integer> task = new FutureTask<Integer>((Callable<Integer>)()->{
int i=0;
for(;i<50;i++) {
System.out.println(Thread.currentThread().getName()+"======" + i);
}
return i;
});
new Thread(task,"Thread0").start();
try {
System.out.println("返回值:" + task.get());
} catch (Exception e) {
e.printStackTrace();
}
}
}
如何实现多线程共享数据
public class Ticket implements Runnable{
private int ticket = 10;
public void run() {
while(ticket>0){
ticket--;
System.out.println("当前票数为:"+ticket);
}
}
public static void main(String[] args) {
Ticket t = new Ticket();
new Thread(t,"售票一").start();
new Thread(t,"售票二").start();
}
}