多线程、同步

1.多线程

1.1多线层的优缺点

优点:

    1.提升资源利用率

    2.提高用户体验

缺点:

    1.降低了其他线程的执行概率

    2.用户会感受到软件的卡顿问题

    3.增加的系统、资源压力

    4.多线程请款下的共享资源问题,线程冲突、线程安全问题

1.2创建自定义线程类的两种方式

class Thread 类

 

    java中的一个线程类

    Thread类是Runnable接口的实现类,同时提供了很多线程的操作使用的方法

interface Runable接口

     这里规定了那个将要被运行

     这里只有一个方法 run方法

方式一:

     自定义线程类,继承Thread类,重写run方法

    创建自定义线程对象,直接调用start方法,开启线程

方式二:

     自定义线程类,遵从Runable接口

     使用自定义接口Runable实现类对象,作为Thread构造方法参数

      借助于Thread类对象和start方法,开启线程

推荐使用方法二,遵从runable接口来完成自定义线程、不影响正常的继承逻辑,并且可以使用匿名内部类来完成线程代码块 的编写

package com.company;

/**
 * 自定义线程类MyThread继承Thread类
 */

class MyThread extends Thread{

    @Override
    public void run(){
        for (int i =0;i<100;i++){
            System.out.println("继承Thread类自定义线程类");
        }

    }

}

/**
 * 自定义线程类MyThread2遵从Runable接口
 */

class MyThread2 implements Runnable{
    @Override
    public void run() {
        for (int i=0;i<100;i++){
            System.out.println("遵从Runable接口实现自定义线程类");
        }
    }
}
public class Main {

    public static void main(String[] args) {

        for (int i=0;i<100;i++){
            System.out.println("main线程");


        }

        //创建一个继承Thread类自定义线程类对象
        MyThread myThread =new MyThread();

        myThread.run();
      //  myThread.run();

        myThread.start();

        //创建一个Thread类对象,使用遵从Runable接口的实现类作为构造方法的参数
        Thread thread = new Thread(new MyThread2());
        thread.start();
        // write your code here
    }
}

自定义线程执行流程简述:

 

 

 

1.4 Thread类的一些方法

构造方法:Constructor

      Thread();

             分配一个新的线程对象、无目标、无名字

      Thread(Runable target):

              创建一个新的线程对象,并且在创建线程对象的过程中,使用Runable接口的实现类对象作为执行的线程代码块目标

       Thread(String name)

                 创建一个新的线程,无指定目标,但是指定当前线程的名字是什么

       Thread(Runable target , String name)

                 创建一个现成的线程对象,使用Runable接口实现类对象,作为执行目标,并且指定name作为线程名

成员方法:

          void setName(String name);

          String getName();

              以上两个是name属性setter和getter方法

          void setPriority (int priority);

               设置现成的优先级、非一定要执行要求、只是增加执行的概率

           int setPriority();

                  获取线程优先级

            void  start();

                    启动线程对象

             public static void sleep(int ms);
                    当前方法是静态方法,通过Thread类调用,要求是当前所在线程代码块对应的线程,
        进行休眠操作,休眠指定的毫秒数
                 public static Thread currentThread();
                     当前方法是静态方法,通过Thread类调用,获取当前所处代码块对应的线程对象。

package com.company;

public class Demo1 {

    public static void main(String[] args) {
        Thread thread1 =new Thread();
        Thread thread2 =new Thread("线程");
        //给予Thread类构造方法Runable接口实现类对象
        Thread thread3 =new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类对象作为线程执行目标");
            }
        });
         Thread thread4 = new Thread(new Runnable() {
             @Override
             public void run() {
                 System.out.println("匿名捏不累对象作为线程");
             }
         },"匿名内部类对象");


        System.out.println(thread1);
        System.out.println(thread2);
        System.out.println(thread3);
        System.out.println(thread4);
    }
}


  

package com.Demo1;
class MyThread3 implements Runnable{

    @Override
    public void run() {
        for (int i =0;i<100;i++){
            try {
                /**
                 * 为什么这里只能抛出异常而不能捕获异常
                 * run方法时实现/重写Runable接口/Thread类内方法
                 * 重写方法只有一个要求,方法的声明必须和接口或者父类一致
                 * Runable接口和Thread类内run方法都没有进行任何抛出操作
                 * 子类中重写run方法也不能抛出、保障声明一致
                 * @Overrid注解,严格的格式检查
                 */
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("自定义线程");
        }
    }
}

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程目标代码");

            }
        }, "线程目标");


        System.out.println(thread.getName());

        thread.setName("匿名线程");
        System.out.println(thread.getName());
        Thread.sleep(1000);
        System.out.println(thread.getPriority());

        /**
         * Thread.MIN_PRIORITY 最小 1
         * Thread.MAX_PRIORITY 最大 10
         * Thread.NORM_PRIORITY  正常 5
         *
         *
         */
        thread.setPriority(Thread.NORM_PRIORITY);
        System.out.println(thread.getPriority());
    }
}

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值