一个进程调用多个线程
package com.company;
import java.awt.desktop.SystemEventListener;
public class threadtest extends Thread {
@Override
public void run() {
System.out.println("yazoefan ");
}
public static void main(String[] args) {
threadtest threadtest = new threadtest();
threadtest.start();
System.out.println("yazoefan2 ");
}
}
线程开启不一定立即执行,由CPU调度执行。
要调用start方法,不能调用run方法。
继承Thread类
子类继承Thread类具备多线程能力
启动线程:子类对象.start()
不建议使用:避免oop单继承局限性
public class threadtest extends Thread {
@Override
public void run() {
System.out.println("yazoefan ");
}
public static void main(String[] args) {
threadtest threadtest = new threadtest();
threadtest.start();
System.out.println("yazoefan ");
}
}
实现Runnable接口
实现接口Runnable具有多线程能力
启动线程:传入目标对象+Thread对象.start()
推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
public class threadtest implements Runnable{
public void run() {
System.out.println("yazoefan ");
}
public static void main(String[] args) {
threadtest threadtest = new threadtest();
new Thread(threadtest).start();
System.out.println("yazoefan2 ");
}
}
//Lambda表达式
1、当代码行只有一行时,可以去掉花括号,但是有多行的话要加上花括号
2、前提是接口为函数式接口,指接口内只有一个方法
3、多个参数也可以去掉参数类型,要去掉都去掉,必须加上括号。
public class lamdaTest {
public static void main(String[] args) {
love loveyou = () ->{
System.out.println(“fuck you 颂长”);
};
loveyou.loveyou();
}
}
interface love{
void loveyou();
}
线程状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IBNFdfTd-1607159694391)(:storage\vq5uykitnk5a5rk9.png)]
//线程停止
public class ThreadStop implements Runnable {
private boolean flag =true;
@Override
public void run() {
int i = 0;
while (flag){
System.out.println("fuck you"+i++);
}
}
public void stop(){
this.flag = false;
}
public static void main(String[] args) {
ThreadStop threadStop = new ThreadStop();
new Thread(threadStop).start();
for (int i = 0; i < 1000; i++) {
System.out.println("f"+i);
if (i > 900){
threadStop.stop();
break;
}
}
}
}
//线程礼让
//让线程从运行状态变成就绪状态,让CPU重新调度
public class ThreadYield im