zoukankan      html  css  js  c++  java
  • java多线程2-总结

    进程:是一个正在执行中的程序,
           每个上进程执行都有一个执行顺序,顺序是一个执行路径,或者叫一个控制单元.
    线程:就是进程中的一个独立的控制单元.
           线程在控制着进程的执行.
          一个进程中至少有一个线程.

    java VM启动的地时候会有一个进程java.exe ,该进程中至少一个线程负责java程序的执行.而且这个线程运行的代码在于main方法中.该线程就是主线程main

    jvm启动不止一个线程,还有负责GC的线程

    多线程就一个目的,多段代码同时执行.相要多段代码同时执行时就用多线程

    java多线程2—创建线程

    /**
     * 创建线程的线种方式一,继承Thread,重写run方法
     */
    public class Test03 {
    
        public static void main(String[] args) {
            //这是创建一个线程,会有一个独立的线程内存空间
            ThreadDemo demo = new ThreadDemo();
            // 使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
            demo.start();
        }
    }
    /**
     * 定义一个线程类,(就是继承Thread)
     * Override run方法.run方法中的代码就是这个线程要执行的代码.(线程体)
     */
    class ThreadDemo extends Thread{
        @Override
        public void run() {
            System.out.println("一个线程");
        }
    }

    java多线程3-线程的几种状态

    1,被创建—start()—运行—sleep(time)—>冻结

                                   -->wait() -->冻结

                                      notify<--   

    2,阻塞状态.--等待执行权,有执行权

    3,冻结-放弃了执行权,

    4,消亡状态.

    java多线程3-Thread类认识

    获取线程对象及名称

    线程的默认名称Thread-编号.编号从0开始.

    1,getName()方法得到线程名.

    2,setName()设置线程名称.

    在构造方法方中给线程设置名字

    class Test extends Thread{
        //构造方法中,设置线程名字.
        Test(Stirng name){
        //可以直接super()因为父类中已定义
           super(name)
        }
        public void run(0{
          //TODO
        }
    }

    static curentThread():相当于线程中this.获取当前线程对象.静态的

    线程状态异常

    同一个线程多次.start(),一个线程已经是在运行了,在去调用start().就是IllegalThreadStateException()

    java多线程4-创建线程2

    第二种创建线程的方法,实现Runnabl接口.

    /**
     * 创建线程的第二种方法
     */
    public class Test03 {
    
        public static void main(String[] args) {
            //这里并没有创建线程,只是定义的一个Runnable的子类.
            ThreadDemo demo = new ThreadDemo();
            //这里才是创建了4个线程
            Thread t1 = new Thread(demo);
            Thread t2 = new Thread(demo);
            Thread t3 = new Thread(demo);
            Thread t4 = new Thread(demo);
            //这样才可以同时开启多线程执行同一代码.
            t1.start();
            t2.start();
            t3.start();
            t4.start();
        }
    }
    /**
     * 实现Runnable接口,Runnable接口只有一个抽象的run方法.
     */
    class ThreadDemo implements Runnable{
        @Override
        public void run() {
            System.out.println("一个线程");
        }
    }

    Runnable接口的定义就是为了规范线程要执行的代码的存入的位置.(就是run方法)

    注意:run方法中的异常只能try,

    多线程中明确的几点:

    1,明确哪些代码是多线程运行代码.

    2,明确共享数据

    3,明确多线程行动代码中哪些语句操作共享数据的.

    java多线程5-锁

    1,同步方法用的是this对象,静态方法同步用的是Class对象

    2,死锁:同步中嵌套同步,两个同步的锁确不同.

    3,线程访问共享数据的安全,所以要用锁.

    java多线程6-线程等待与唤醒

    1,线程运行的时候内存中会建立一个线程池,等待线程都在存在这个线程池中notify()唤醒的一般线程池中第一个等待的线程

    wait(),notify(),notifyAll()都使用在同步中,因为要对持有的锁的线程操作.

    只有同一个锁上的被等待线程,可以被同一个锁上的线程notify唤醒

    也就是:等待和唤醒必须是同一个锁.

    在多线程的时候要注意两点,

    1,循环判断标记--所要用while

    2,还要唤醒对方线程,也就是要通知的线程,用notifyAll()唤醒所有.为了避免所有线程都wait().不过用notifyall()也有一个缺点会唤醒本方线程.

    java多线程7-JDK1.5之后

    1,显示的锁机制.Lock里面的lock和nulock

    2,Object中的wati,notify,notifyAll 替换了Condition对象.

    3,该对象可以Lock进行获取,可以实现本方线程只唤醒方线程

    java多线程7-线程的停止

    1,停止线程只有一个种方法,那就是run方法结束.

    2,开启多线程,通常都要用循环结构.(你不用循环的话,就在一个线程里面跑得了,反正你run方法就那几行代码,运行完了还不是单线程)

    3,所以只要控制好循环就可以,控制好线程什么时候结束.

    interrupt()—这个方法,是中断线程.就是清除线程的冻结状态.让线程运行下去,把run方法运执行完.然后结束线程.

    会抛出InterruptException

    其它方法:

    jion方法--等待该线程结束.在A线程是指使B线程去调用jion方法,那么A线程就会等到B线程结束后在去运行.

    setDaemon(true)--那个线程调用这个方法,那么这个线程就会变成后台线程(守护线程).但是不知道它守护那个线程.

    yield()--暂停当前正在执行的线程对象,并执行其它线程.

  • 相关阅读:
    mysql双主配置
    nginx js、css多个请求合并为一个请求(concat模块)
    PHP中利用Redis管道加快执行
    总结最近游戏中活动出现被刷问题。
    问题记录--负载均衡的均衡器配置了高可用导致问题
    php的session获取不到问题之ie浏览器(yaf框架)
    Django URLs error: view must be a callable or a list/tuple in the case of include()
    在Sublime Text运行Python.How to run Python code from Sumblime Text
    JavaWeb项目自动化部署测试学习
    hadoop2.5.1+hbase1.1.2安装与配置
  • 原文地址:https://www.cnblogs.com/yinyu/p/5313496.html
Copyright © 2011-2022 走看看