创建线程的方式:
1.继承Thread类
public class Demo1 extends Thread{
public Demo1(String name){
super(name);
}
@Override
public void run(){
while(!interrupted()){
System.out.println(getName()+"线程执行");
try{
Thread.sleep(200);
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String [] args){
Demo1 d1=new Demo1("thread1");
Demo1 d2=new Demo1("thread2");
d1.start();
d2.start();
d1.stop();//过时方法,因为此方法让线程暂停后并不会释放资源
d1.interrupt();//中断方式,推荐使用
}
}
需要注意的是在执行了start()方法后并不会立即执行多线程代码,而是是该线程变为可运行状态,什么是运行大多线程代码由系统决定。
2.实现Runnable接口——面向接口编程,更解耦
//作为线程任务存在
public class Demo2 implements Runnable{
@Override
public void run(){
while(true){
System.out.println("thread running。。。。");
}
}
public static void main(String [] args){
}
}
3.匿名内部类
public class Demo3{
public static void main(String [] args){
new Thread(){
public void run(){
System.out.println("thread start>>>");
};
}.start();
new Thread(new Runnable(){
@Override
public void run(){
System.out.println("thread start>>>>");
}
}).start();
}
}
4.带返回值的线程
public class Demo4 implements Callable<Integer> {
public static void main(String [] args){
Demo4 d4=new Demo4();
//实现了runnable接口,对线程任务的封装
FutureTask<Integer> task=new FutureTask<>(d4);
Thread t=new Thread(task);//task线程任务
t.start();
Integer res= null;
try {
res = task.get();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("运行结果为"+res);
}
@Override
public Integer call() throws Exception{
System.out.println("正在运行。。。");
Thread.sleep(3000);
return 2;//模拟返回结果为2
}
}
5.定时器(quartz)
public class Demo5{
public static void main(String [] args){
Timer timer=new Timer();
timer.schedule(new TimerTask(){
@Override
public void run(){
System.out.println("timertask is run");
}
},0,1000);
}
}
6.线程池的实现
public class Demo5{
public static void main(String [] args){
ExecutorService threadPool=Executors.newFixedThreadPool(10);//固定线程数量
for(int i=0;i<10;i++){//10个线程提交了10个线程任务
threadPool.execute(new Runnable(){
@Override
public void run(){
System.out.println(Thread.currentThread().getName());
}
});
}
threadPool.shutdown();
}
}
7.Lambda表达式实现
public class Demo5{
public static void main(String [] args){
List<Interger> values=Arrays.asList(10,20,30,40);
int res=new Demo7().add(values);
System.out.println("计算的结果"+res);
}
public int add(List<Interger> values){
return values.parallelStream().mapToInt(a->a).sum();//parallelStream并行执行
}
}