创建线程的三种方法
方法一:
package com.liu.thread;
/**
* ..创建线程的方式一:
* 1.创建:继承Thread+重写run方法
* 2.启动:创建子类对象+start
*
* @author ASUS
*/
public class StartThread extends Thread{
public static void main(String[] args) {
//启动线程 1.创建子类对象 2.调用子类对象的start方法
StartThread st=new StartThread();
st.start(); //不保证立即运行 由CPU //调度 ///开启一个新的线程
//st.run(); //普通方法的调用
for (int i = 0; i <20; i++) {
System.out.println("一边写代码");
}
}
/**
* .线程的入口点
*/
@Override
public void run() {
//重写run方法
for (int i = 0; i < 20; i++) {
System.out.println("一边听歌");
}
}
}
方法二:
package com.liu.thread;
/**
* .模拟龟兔赛跑
* @author ASUS
*
*/
public class Racer implements Runnable {
private static String winner;
@Override
public void run() {
for (int steps=1;steps<=100;steps++) {
//模拟休息
if (Thread.currentThread().getName().equals("rabbit")&&steps%10==0) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"--->"+steps);
//比赛是否结束
boolean flag=gameOver(steps);
if (flag) {
break;
}
}
}
private boolean gameOver(int steps) {
if (winner!=null) { //是否存在胜利者
return true;
}else {
if (steps==100) {
winner=Thread.currentThread().getName();
System.out.println("winner--->"+winner);
return true;
}
}
return false;
}
public static void main(String[] args) {
Racer racer=new Racer();
new Thread(racer,"tortoise").start();
new Thread(racer,"rabbit").start();
}
}
方法三:
package com.liu.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* .了解创建线程的方式三:
* @author ASUS
*
*/
public class CDownloader implements Callable<Boolean> {
private String url; //远程路径
private String name; //存储名字
public CDownloader(String url, String name) {
super();
this.url = url;
this.name = name;
}
public Boolean call() throws Exception{
WebDownloader wd=new WebDownloader();
wd.download(url, name);
return true;
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
CDownloader cd1=new CDownloader("http://5b0988e595225.cdn.sohucs.com/images/20190924/cc1604d4d9e74b49ab9009f90b0a8081.jpeg", "fengjing01.jpeg");
CDownloader cd2=new CDownloader("http://m.tuniucdn.com/filebroker/cdn/olb/0c/51/0c51982512494e626243129e700ded02_w1536_h520_c1_t0.png", "fengjing02.png");
CDownloader cd3=new CDownloader("http://5b0988e595225.cdn.sohucs.com/images/20190831/41d8561e70e34d5189d052c7282bcf53.jpeg", "fengjing03.jpeg");
//创建执行服务:
ExecutorService ser=Executors.newFixedThreadPool(3);
//提交执行:
Future<Boolean> result1=ser.submit(cd1);
Future<Boolean> result2=ser.submit(cd2);
Future<Boolean> result3=ser.submit(cd3);
//获取结果:
boolean r1=result1.get();
boolean r2=result2.get();
boolean r3=result3.get();
//关闭服务器
ser.shutdown();
}
}