目录
5.2.1 创建50个线程 Executors.newCachedThreadPool();
5.2.2 单线程 Executors.newSingleThreadExecutor();
5.2.3 定义几个即运行几个 Executors.newFixedThreadPool(n);
1.生命周期(五种状态--创建、就绪、运行、阻塞、死亡)
1.1 创建线程
1.1.1 继承Thread--实例
public class Thread01 extends Thread {
private String name;//给线程名称
public Thread01(String name) {
this.name = name;
}
//线程运行
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(this.name+"--"+i);//拥有时间片资源--即运行
try {
//线程阻塞
//Thread01继承Thread,则拥有Thread的方法 可以直接调用方法
sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
//实例化对象 创建
Thread t1 = new Thread01("A");
Thread t2 = new Thread01("B");
Thread t3 = new Thread01("C");
//就绪
t1.start();
t2.start();
t3.start();
//运行结束--线程死亡
}
}
运行结果部分截图如下所示:
1.1.2 实现Runnable接口--实例
public class Thread02 implements Runnable{
private String name;//给线程名称
public Thread02(String name) {
this.name = name;
}
//线程运行
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(this.name+"--"+i);//拥有时间片资源--即运行
try {
//线程阻塞
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
// //实例化对象 创建
// Thread t1 = new Thread(new Thread02("A"));
// Thread t2 = new Thread(new Thread02("B"));
// Thread t3 = new Thread(new Thread02("C"));
// //就绪
// t1.run();
// t2.run();
// t3.run();
// //运行结束--线程死亡
/*lambda表达式*/
// new Thread(()-> {
// for(int i=1;i<=10;i++) {
// System.out.println(Thread.currentThread().getName()+"-"+i);
// try {
// Thread.sleep(200);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// }
// }).start();;
/** 匿名内部类 */
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println(Thread.currentThread().getName()+"-"+i);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();;
}
}
1.1.3 实现Callable接口--实例
/**
* Callable接口 : 有返回值 可抛出异常
* @author 皮卡丘
*
*/
public class Thread03 implements Callable {
@Override
public Object call() throws Exception {
int s = 0;
for (int i = 0; i < 1000; i++) {
s += i;
}
return s;
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
FutureTask<Integer> ft = new FutureTask<Integer>(new Thread03());
ft.run();
System.out.println("result: "+ft.get());
}
}
1.2 阻塞线程
1.2.1 join()
public class ThreadBlock extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(this.getName()+"--"+i);
}
try {
sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws InterruptedException {
Thread t1 = new ThreadBlock();
Thread t2 = new ThreadBlock();
Thread t3 = new ThreadBlock();
//线程交叉执行
t1.start();
t1.join();//阻塞其他线程,先执行t1
t2.start();
t3.start();
}
}
1.2.2 yield()
public class ThreadBlock extends Thread {
@Override
public void run() {
for(int i=0;i<10;i++) {
//当前值为偶数,则让出时间片,让其他线程先运行
if(i%2==0) {
yield();
}
System.out.println(this.getName()+"--"+i);
try {
sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Thread t1 = new ThreadBlock();
t1.setName("V");
Thread t2 = new ThreadBlock();
t2.setName("A");
Thread t3 = new ThreadBlock();
t3.setName("L");
t1.start();
t2.start();
t3.start();
}
}