java中多线程相关

本文介绍了Java中线程的创建,包括Thread类的不同构造方法和Runnable接口的使用。详细讲解了线程的start(), sleep(), join()等方法,以及线程的五种状态。同时,讨论了同步机制,如synchronized关键字的使用,以及wait(), notify(), notifyAll()线程间通信方法的应用。" 88054798,7322501,使用JMeter模拟多IP地址请求,"['性能测试', 'JMeter工具', '负载均衡', '服务器监控']
摘要由CSDN通过智能技术生成

要提到线程,就必须说到一个类Thread和一个接口Runnable,这里我们要注意,Thread类继承了Runnable的接口

线程的创建

1、在Java中负责线程的这个功能的是Java.lang.Thread 这个类可以通过创建 Thread 的实例来创建新的线程。 
2、每个线程都是通过某个特定Thread对象所对应的方法run( )来完成其操作的,方法run( )称为线程体。 
3、通过调用Thead类的start()方法来启动一个线程。 

构造方法如下
Thread() 创建一个线程对象
Thread(String name) 创建一个具有指定名称的线程对象
Thread(Runnable target) 创建一个基于Runnable接口实现类的线程对象
Thread(Runnable target,String
name) 创建一个基于Runnable接口实现类,并且具有
指定名称的线程对象。

Thread类的常用方法
public void run() 线程相关的代码写在该方法中,一般需要重写
public void start() 启动线程的方法
public static void sleep(long m) 线程休眠m毫秒的方法
public final void join() 优先执行调用join()方法的线程
public String getName() 调取当前线程的名字

创建线程的方式 一

public class ThreadDemo01 extends Thread { 
 //重写父为的run方法 
    @Override 
     public void run() { 
         for(int i=0;i<10;i++){ 
             System.out.println("第"+i+"次线程执行........"); 
         } 
} 
public static void main(String[] args) { 
     //创建对象,就创建好一个线程 
      ThreadDemo01 t=new ThreadDemo01(); 
       //t.run();//启动线程使用start方法 
      t.start(); 
       for(int i=0;i<5;i++){ 
             System.out.println("main-->"+i); 
       } 
   } 
} 

创建线程的方式二

class PrintRunable implements Runnable{

    @Override
    public void run() {
        int i =1;
        while(i<=10)
            System.out.println(Thread.currentThread().getName()+"正在运行"+(i++));

    }
}
public class Test {
    public static void main(String[] args) {
        PrintRunable pr = new PrintRunable();//
        Thread t1 = new Thread(pr);
        t1.start();//三步实现线程启动,记住:只能用Thread或其子类来启动线程
        PrintRunable pr1 = new PrintRunable();//
        Thread t2 = new Thread(pr);
        t2.start();
    }
}

不同线程可以处理同一个资源

class PrintRunable implements Runnable{

    int i =1;
    @Override
    public void run() {

        while(i<=10)
            System.out.println(Thread.currentThread().getName()+"正在运行"+(i++));

    }
}
public class Test {
    public static void main(String[] args) {
        PrintRunable pr = new PrintRunable();//
        Thread t1 = new Thread(pr);
        t1.start();//三步实现线程启动,记住:只能用Thread或其子类来启动线程
        //PrintRunable pr1 = new PrintRunable();//
        Thread t2 = new Thread(pr);
        t2.start();
    }
}

线程的状态

• 新建(New)
• 可运行(Runnable)
• 正在运行(Running)
• 阻塞(Blocked)
• 终止(Dead)

sleep方法应用(使线程从Running )

• Thread类的方法
public static void sleep(long millis)
• 作用:在指定的毫秒数内让正在执行的线程休眠(暂停执行)
• 参数为休眠的时间,单位是毫秒

join方法应用(抢占cpu,获取Running状态)

• Thread类的方法
public final void join()
• 作用:等待调用该方法的线程结束后才能执行

同步

1、作用:完整的执行某个方法或者某个方法块
2、用法:synchronized关键字
• synchronized关键字用在

  • 成员方法
    -静态方法
    -语句块
    public synchronized void saveAccount(){ }
    public static synchronized void saveAccount(){ }
    synchronized (obj){……}

线程间的通信
• wait()方法:中断方法的执行,使线程等待
• notify()方法:唤醒处于等待的某一个线程,使其结束等待
• nofifyAll()方法:唤醒所有处于等待的线程,使它们结束等待

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赤狐先生

如果有一点点帮助,可以给点支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值