线程
线程
程序的一次执行过程,实质上就是一个执行的程序,可以理解成是在进程中独立;运行的子任务;
线程的实现:
有两种方法可以实现线程,1、extends Thread 2、implement Runnable ,继承Thead类重写run()方法后可以直接调用start()方法,实现Runnable接口后不能调用static()方法,必须传给Thread中才能调用
方法2用的比较多,因为接口可以多个继承,更加灵活,而父类只能继承一个
1、extend Thread:
public class Thread1 extends Thread{
private String name;
public Thread1(String name) {
this.name=name;
}
//重写run方法,里面写入要执行的代码
public void run() {
for(int i=0;i<10;i++) {
System.out.println(name+" 做第 "+i+" 个俯卧撑");
}
}
public static void main(String[] args) {
Thread1 zhangsan=new Thread1("张三");
Thread1 lisi=new Thread1("李四");
zhangsan.start();
lisi.start();
}
}
2、implement Runnable:
public class R implements Runnable{
private int x=0;
//重写run方法
public void run(){
for(int i=0;i<100;i++){
try{
Thread.sleep(10);
}catch(Exception e){}
System.out.println(x++);
}
}
}
public static void main(String[] args) {
new Thread(new R()).static();
}
常用方法:
start(): 启动线程并调用线程的run()方法 run(): 直接调用run()方法
currentThread() 静态方法,返回正在被执行的线程的信息。 getName(): 获取当前线程的名字
setName() 设置当前线程的名字 yield(): 释放当前cpu的执行权,暂停正在执行的线程对象
join() 在线程A中调用线程B的join方法,使得线程A进入阻塞状态,直到线程B完全执行完,线程A才结束阻塞状态
stop() 已过时,在执行此方法时,强制结束该线程 isAlive() 判断当前线程是否还存活
sleep(1000*5) 当前线程休眠5秒 wait() 进入等待状态,必须其他线程调用notify()方法才能唤醒
notify() 唤醒,唤醒线程池等待线程其中的一个 notifyAll() 唤醒线程池所有等待线程
等待和唤醒注意事项:
1、wait方法和notify方法是属于Object对象的
2、wait方法和notify方法必须要在同步代码块或者同步函数中才能使用
3、wait方法和notify方法必须要有锁对象调用
start和run的区别:
start()方法是用来启动新创建的线程,start内部会调用run()方法,而run()是之间调用方法,没有新的线程启动
互斥锁
线程同步(synchronized):
使用后,每次只允许一个线程执行,其他线程进入阻塞状态
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具