小白看了也会的多线程

小白看了也会的多线程
世间万物都可以同时完成很多工作。例如,人体可以同时进行呼吸、血液循环、思考问题等活动。用户既可以使用计算机听歌,也可以编写文档和发送邮件,而这些活动的完成可以同时进行。这种同时执行多个操作的“思想”在 Java 中被称为并发,而将并发完成的每一件事称为线程
一,多线程实现的方式
1,继承Thread 类

public class demo extends Thread {

    @Override
    public void run(){
        System.out.println("当前线程"+Thread.currentThread().getName());
    }

}

1.2 编写线程的主方法

public class TestDemo{
  public static void main(String[] args) {
      demo demo =new demo();
      demo.setName("A");
      demo.start();
    }
    }

运行看到的结果是
在这里插入图片描述
2,实现 Runnable 接口

public class TestRunnable implements Runnable{

    @Override
    public void run()
    {
        System.out.println("Runnable运行中!");
    }

}

2.2 编写现线程主方法

public class demo4 {
    public static void main(String[] args) {
        Runnable runnable = new TestRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
    }


}

查看运行结果
在这里插入图片描述
二, 线程的生命周期
在这里插入图片描述
下面对线程生命周期中的 7 种状态做说明。
出生状态:用户在创建线程时所处的状态,在用户使用该线程实例调用 start() 方法之前,线程都处于出生状态。
就绪状态:也称可执行状态,当用户调用 start() 方法之后,线程处于就绪状态。
运行状态:当线程得到系统资源后进入运行状态。
等待状态:当处于运行状态下的线程调用 Thread 类的 wait() 方法时,该线程就会进入等待状态。进入等待状态的线程必须调用 Thread 类的 notify() 方法才能被唤醒。notifyAll() 方法是将所有处于等待状态下的线程唤醒。
休眠状态:当线程调用 Thread 类中的 sleep() 方法时,则会进入休眠状态。
阻塞状态:如果一个线程在运行状态下发出输入/输出请求,该线程将进入阻塞状态,在其等待输入/输出结束时,线程进入就绪状态。对阻塞的线程来说,即使系统资源关闭,线程依然不能回到运行状态。
死亡状态:当线程的 run() 方法执行完毕,线程进入死亡状态。
三,线程之间变量的访问
3.1 变量不共享

ublic class Test1 extends Thread{
  private  int count = 5;
    public Test1(String name){
        super();
        this.setName(name);
    }

    @Override
    public  void run(){
        super.run();
        while (count>0){
            count--;
            System.out.println("由 "+this.currentThread().getName()+" 计算,count="+count);
        }
    }

}

编写主方法

 public static void main(String[] args) {
        Test1 a=new Test1("A");
        Test1 b=new Test1("B");
        Test1 c=new Test1("C");
        a.start();
        b.start();
        c.start();
    }

运行查看为
在这里插入图片描述
3.2 变量共享

public class Test1 extends Thread{
  private  int count = 5;


    @Override
    public  void run(){
        super.run();
            count--;
            System.out.println("由 "+this.currentThread().getName()+" 计算,count="+count);

    }

}

编写住方法

   public static void main(String[] args) {
       Test1 test1 = new Test1();
       Thread a=new Thread(test1,"A");
        Thread b=new Thread(test1,"B");
        Thread c=new Thread(test1,"C");
        a.start();
        b.start();
        c.start();
    }

查看运行为
在这里插入图片描述
上述访问如果多个线程一起访问就出现了非线程安全问题更改代码如下

public class Test1 extends Thread{
  private  int count = 5;


    @Override
   synchronized   public  void run(){
        super.run();
            count--;
            System.out.println("由 "+this.currentThread().getName()+" 计算,count="+count);

    }

}

四, 线程睡眠sleep


    @Override
    public  void run(){
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = simpleDateFormat.format(date);
        System.out.println("当前时间为"+format+" 开始");
        try {
            Thread.sleep(3000);
        }catch (InterruptedException e){
        e.printStackTrace();
        }
        Date date1 = new Date();
        String format1 = simpleDateFormat.format(date1);

        System.out.println("当前时间为"+format1+"结束");


    }

编写主线程

   public static void main(String[] args) {
    Test1 t = new Test1();
    t.start();
    }

查看运行结果
在这里插入图片描述
五 线程让步 yieId()
六 线程停止 interrupt()
七 线程暂停 suspend() 与 resume() 方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值