zoukankan      html  css  js  c++  java
  • Java笔记--多线程

    1、线程的创建与运行(方式一):

    --1)创建一个Thread的子类;

    --2)重写Thread类的run()方法;

    --3)创建一个子类的对象;

    --4)调用线程的start()方法来启动线程,Java虚拟机将调用run()方法。

    public class TestThread {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            SubThread st = new SubThread();
            st.start();
            
            System.out.println("---MainThread---");
        }
    }
    
    class SubThread extends Thread{
        @Override
        public void run() {
            System.out.println("---SubThread---");
        }
    }

     2、Thread的常用方法:

    --1)start(); //启动线程

    --2)run(); //子线程要执行的代码写在该方法中

    --3)currentThread(); //静态方法,调取当前线程

    --4)getName(); //获取当前线程名称

    --5)setName(); //设置当前线程名称

    --6)yield(); //释放当前CPU执行权

    --7)join(); //在A线程中调用B线程的join()方法,此时A线程停止执行,B线程开始执行,直到B执行完毕A再继续执行

    --8)isAlive(); // 判断当前线程是否为活动的

    --9)sleep(long l);//显示的让当前线程睡眠l毫秒

    --10)线程通信:wait(),notify(),notifyAll()

    --11)优先级:getPriority(),setPriority()

    3、方式二:

    --1)创建一个类,该类需实现Runnable接口;

    --2)实现Runnable接口的抽象方法run();

    --3)创建实现类对象;

    --4)将此对象作为形参传递给Thread类的构造器中,创建Thread类对象;

    --5)调用start()来启动线程。

    4、方式二优于方式一,即实现的方式优于继承的方式,因为实现的方式避免了Java单继承的局限性而且更易于共享数据。

    5、使用多线程的优点:

    --1)提高应用程序的响应;

    --2)提高计算机系统CPU的利用率;

    --3)改善程序结构。

    6、线程分类:1)守护线程;2)用户线程。

    7、线程的生命周期:1)新建;2)就绪;3)运行;4)阻塞;5)死亡。

    8、线程的同步:

    --1)同步代码块;

    synchronized(同步监视器){
    
      //需要被同步的代码
    
    }

    --2)同步方法:将操作共享数据的方法声明为synchronized。

    9、死锁:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源。解决的方法:

    --1)专门的算法、原则;

    --2)尽量减少同步资源的定义。

    10、线程的通信:

    --wait():令当前线程挂起并放弃CPU、同步资源,使别的线程可访问并修改共享资源,二当前线程排队等候再次对资源的访问;

    --notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待;

    --notifyAll():唤醒正在排队等待资源的所有线程结束等待。

    --注:上诉三个方法只有在synchronized方法或者synchronized代码块中才能调用,否则会出现异常(java.lang.IllegalMonitorStateException)

  • 相关阅读:
    SD卡的控制方法(指令集和控制时序)
    MDK的优化应用(转)
    SD卡的SPI模式的初始化顺序(转)
    SD卡读写扇区注意事项(转)
    MDK下调试时提示AXF文件无法导入的解决方法(转)
    把一个 int 数字 n 格式化成16进制的字符串(前面补零成0位)
    DB9 公头母头引脚定义及连接、封装
    RS232 DB9 公头 母头 串口引脚定义
    Codeforces 91C Ski Base 加边求欧拉回路数量
    Cocos Code IDE + Lua初次使用FastTiledMap的坑
  • 原文地址:https://www.cnblogs.com/tengtao93/p/4836261.html
Copyright © 2011-2022 走看看