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

    对java多线程的认识
    多线程的概念:多线程是一种机制,它允许在程序中并发的执行多个线程,且每个线程间相互独立。
    实现多线程的两种方式:
    1、继承java.lang.Thread类,并且重写它的run方法,将线程的执行主体放在其中;
    2、实现java.lang.Runnable接口,实现它的run方法,并将线程的执行主体放在其中;
    线程有五大状态:
    1、新建状态(New):使用new操作符创建一个线程的时候,线程还没有开始执行;
    2、就绪状态(Runnable):当线程调用了start方法之后,线程就进入就绪状态;处于就绪状态的线程不一定立即运行run方法,只有获取到cpu时间才可以执行run方法;
    3、运行状态(running):当线程获取到了cpu运行时间之后,就进入到运行状态了,调用run方法;
    4、阻塞状态(blocked):正在运行的线程还没有结束,暂时让出cpu,这时其他就绪线程就有机会获得cpu时间;
    以下原因会导致线程进入阻塞状态:
    1、线程调用sleep方法进入睡眠状态;
    2、线程在调用一个在i/o上被阻塞的操作
    3、线程试图去获得一个锁,但是这个锁被其他线程持有;
    。。。。。。
    5、死亡状态(Dead):
    有以下的原因可导致线程死亡:
    1、run方法正常退出而正常死亡;
    2、一个未捕获的异常导致线程意外退出而死亡;
    可以用isAlive方法来判断线程是否还活着,只要是线程处于运行或者阻塞状态,就返回true;如果线程状态是New且不是可运行的状态或者线程死亡了,则返回false;
    线程同步(synchronized):
    可以同步方法,也可以同步代码块;对于同步方法来说,每个方法只有获取到所属类实例的锁才可以被执行,一旦该方法被执行,则独占锁,知道方法返回时或者异常退出时才会释放掉锁;
    同步代码块也是一样,当两个并发线程访问同一个对象中的这个synchronized(this)代码块的时候,一个时间内只有一个线程得到执行,另一个线程只有在这个线程执行完成之后才可以执行;
    线程同步之Lock:
    Lock是一个接口,它位于java 5.0新增的java.utils.concurrent包的子包locks中,实现Lock接口类具有与synchronized关键字相同的功能,但是它的功能强大一些,java.utils.concurrent.locks.ReentrantLock是比较常用的;注意需要在finally中unlock释放锁;
    线程阻塞:
    sleep()方法、suspend和resume方法、yield方法、wait和notify方法都可以使线程进入阻塞状态;但是yield方法和wait方法都会释放cpu时间,而sleep方法和suspend不会释放cpu时间;
    终止线程的方法:
    1、当run方法执行完毕,自动终止;
    2、使用stop方法,不过这个方法不推荐使用,会有意料不到的后果;
    3、使用interrupt方法
    多个客户端一个服务器的实现方法:
    利用多线程技术,服务器socket负责监听端口,设置一个无限循环,在其中实现:将监听到的socket实例赋值 给线程并且启动线程,由线程来完成业务逻辑;
    绊倒我的人我让他永远起不来 扶起我的人我让他永远不会倒 混社会不管你有多努力,到最后都是以成败论英雄!
  • 相关阅读:
    导包路径
    django导入环境变量 Please specify Django project root directory
    替换django的user模型,mysql迁移表报错 django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependen cy user.0001_initial on database 'default'.
    解决Chrome调试(debugger)
    check the manual that corresponds to your MySQL server version for the right syntax to use near 'order) values ('徐小波','XuXiaoB','男','1',' at line 1")
    MySQL命令(其三)
    MySQL操作命令(其二)
    MySQL命令(其一)
    [POJ2559]Largest Rectangle in a Histogram (栈)
    [HDU4864]Task (贪心)
  • 原文地址:https://www.cnblogs.com/MrNeng/p/9291136.html
Copyright © 2011-2022 走看看