Java核心编程day4 (线程)

  1. 线程:线程是一个动态执行的过程,它也有一个从产生到死亡的过程。

  1. 并发:指两个和多个事件在同-一个时间段内发生,CPU高速切换交替去执行任务。

  1. 并行:指两个和多个事件在同-一个时间发生,执行任务。

  1. java主线程

  1. 线程的创建

方式一:通过继承Thraed创建

步骤:(1)创建Thread的子类

(2)重写父类中的run,并且编写新线程要执行的内容

(3)创建Thread对象,调用strat()方法,开启一个线程,会自动执行run方法

设置线程的名字:

(1)调用Thread类中的setName(“名字”)设置

(2)在run方法调用getName();获取线程名称

补充:通过匿名内部类创建线程

public class MyThread extends Thread {
    //新的线程开启后,会执行run方法中的内容
    @Override
    public void run() {
        try{
        for (int i = 0; i <10 ; i++) {
            //getName()获取线程名称
            System.out.println(getName()+"打游戏");
            Thread.sleep(1000);
        }}catch(Exception e){
            e.printStackTrace();
            }
    }
}

public class Test {
    public static void main(String[] args) throws  Exception{
        //创建Thread对象
        MyThread t = new MyThread();
        //设置线程名字
        t.setName("我的线程");
        //开启线程,会自动执行run方法
        t.start();
    }
}
 //通过匿名内部类创建线程
       Thread t2= new Thread() {
           //
           @Override
           public void run() {
               try{
                   for (int i = 0; i < 10; i++) {
                       System.out.println(getName()+"跳舞");
                       Thread.sleep(1000);
                   }
               }catch (Exception e){
                   e.printStackTrace();
               }
           }

           };

方式二:通过实现Runable创建接口

步骤:(1)创建Runable接口实现类

(2)重写run方法,编写线程执行的内容

(3)创建Runnable实现类对象

(4)创建Thread对象,通过构造函数传递实现类对象,调用start()开启线程,执行run方法

线程名字的设置:通过Thread构造函数设置名称,在run方法中通Thread.currentThread().getName()获取。

补充:通过匿名内部类创建线程

public class YourThread implements Runnable{
    @Override
    public void run() {
        try{
            for (int i = 0; i <10 ; i++) {
                //获取线程名称:通过获取到当前正在执行的线程来获取名称
                System.out.println(Thread.currentThread().getName()+"打游戏");
                Thread.sleep(1000);
            }}catch(Exception e){
            e.printStackTrace();
        }

    }
}

public class Test {
    public static void main(String[] args) {
        //开启线程
        //创建实现类对象
        YourThread t = new YourThread();
        //创建Thread对象,通过构造函数传递实现类对象
        Thread thread = new Thread(t,"你的线程");
        //调用start方法开启线程
        thread.start();
        //创建匿名内部类创建线程
        Runnable r=new Runnable(){
            @Override
            public void run() {
                try{
                    for (int i = 0; i < 10; i++) {
                        System.out.println(Thread.currentThread().getName()+"跳舞");
                        Thread.sleep(1000);
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        };
       new Thread(r,"名字").start();
    }
}

6. 线程安全问题:当多个线程操作同一资源时,线程之间没有协调执行,没有达到预期的效果。

  1. 线程同步:使用线程同步解决线程安全问题

原理:将会出现线程安全问题的代码,加上一个同步锁, 当多个线程操作同一个资源的时候,必须获取到锁后才能操作资源 保证每次次有一个线程在操作资源。

2、同步的方式:

(1)使用同步代码块

格式:

synchronized(锁对象){//可以使用任意一个对象来充当锁,但是要保证锁对象只能由一个

//可能会出现线程安全的代码

}

(2)(2)使用同步方法(静态,非静态):将可能会出现线程安全的代码放在一个同步方法中去

同步方法:使用synchronized修饰的方法

静态:锁是当前类Class字节码对象

非静态:锁是当前对象this

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值