线程

线程

程序的一次执行过程,实质上就是一个执行的程序,可以理解成是在进程中独立;运行的子任务;

线程的实现:

有两种方法可以实现线程,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):

使用后,每次只允许一个线程执行,其他线程进入阻塞状态

 

posted @   太浪~  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示