zoukankan      html  css  js  c++  java
  • java多线程

    Java中如何正确停止线程?

    不能用stop(),

    应该使用退出标志(正确退出线程)

    interrupt():中断线程,并不能正确停止线程

    volatile保证了线程可以正确的读取其他线程写入的值。

    常用的方法

    yield();使用此方法,当执行到它的时候,当前线程就会释放对cpu的执行权,但是下一刻,对CPU的执行权可能又被它抢到,也可能被其他线程抢到

    setName():设置线程名字

     join():调用此方法,所有的线程等待当前线程执行完才执行

    当i==20时,强制让子线程进来,直到子线程完全执行完,才会执行主线程

    isAlive();判断线程是否还存活

    sleep():显示的让当前线程睡眠

    设置线程的优先级

    getPriority():返回线程优先值

    setPriority(int new Priority):设置线程优先级,1,5,10

    设置线程的优先级并不是说设置的优先级越高,他就先执行,只能说是提高可它限制性的概率

    实例:

      实现三个窗口售票,票数要设置为静态的(因为是继承Thread,使用实现Runnable就不用),这样三个窗口才能共用100张,

    使用继承Thread

    使用实现Runnable

    当涉及到共享的时候,使用实现Runnable接口会更好,java是单继承,所以实现Runnable可以避免单继承

    上面用继承和实现的方式实现抢票都存在线程安全的情况(重票问题),需要进行处理,因为多个线程操作同一个数据,一个线程还没有执行完,另外一个线程就参与进来,没有加锁的话会出现线程安全问题

    多线程的优点

    1,提高程序的响应,对图形化更有意义,可憎前用户体验,

    2,提高计算机系统的CPU的利用率

    3,改善程序结构,将长又复杂的进程分为多个线程,独立运行,立于理解和修改

    Java种的线程可分为两类:守护线程和用户线程

    1.它们几乎每个方面都是相同的,唯一的区别就是判断JVM何时离开

    2.守护线程是用来服务用户线程的,通过在start()方法前调用thread.setDaemon(trur)可以把一个用户变成一个守护线程

    3.java垃圾回收就是一个典型的守护线程。

    4.若jvm中都是守护线程,当前jvm将退出

    线程的生命周期

    死锁:

      不同的线程分别占用对方的同步资源不放弃,都在等待对方放弃自己需要的资源,就形成了线程的死锁

    解决方法:

      1.专门的算法,原则

      2.尽量减少同步资源的定义,同步资源越多,越容易发生死锁

    线程的通信

    wait(),notify(),notifyAll()

    wait():令当前的线程挂起并放弃CPU执行权,同步资源,让别的线程可以访问并修改共享资源,而当前线程排队等候在此对资源的访问

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

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

    java.lang.Object提供了这三个方法只有在synchronized方法或synchronized代码块中才能使用,否则会报java.lang.illegalMonitorStateException异常

    实现两个线程交叉打印1-100;

    生产者和消费者的的问题

    生命不止,折腾不息
  • 相关阅读:
    2020总结来了,文末有福利
    CentOS 用户请关注,你期待的 CentOS Linux 9 再也不会来了
    全球最好的10款波尔多葡萄酒,拉菲居然垫底
    eth以太坊合约开发工具集
    html格式的文字去掉html tag转为纯text文字
    如何隐藏X-Powered-By
    aiXcoder3.0呼之欲出,代码补全 AI,带你进入「个性化智能编程时代」
    windows故障群集修改心跳网卡【原创】
    keepalived非争抢机制不生效报错Received lower prio advert, forcing new election
    MySQL主从复制,启动slave时报错1872 Slave failed to initialize relay log info structure from the repository
  • 原文地址:https://www.cnblogs.com/steakliu/p/10555980.html
Copyright © 2011-2022 走看看