zoukankan      html  css  js  c++  java
  • java中的多线程(一)

            进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间。

            线程:进程中的一个执行单元,负责进程中的程序的运行,一个进程至少要有一个线程。

                      一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。

           程序启动了多线程,有什么应用呢?

    答:可以实现多部分程序同时执行,称之为并发;备注:在某一时刻只会有一个进程在进行,由于CPU切换的频率比较快到时我们平成感觉是同时进行的。

          多线程的使用可以合理使用cpu的资源,如果线程过多会导致性能降低。

          CPU处理程序时是通过快速切换完成的,在我们看来好像是随意一样,但是CPU有着自己的计算方法。

    下面通过代码来进行演示:

          在如下的代码中,jvm启动后,必然有一个执行路径(线程)从main方法开始的,一直执行到main方法结束。这个线程在java中称之为主线程。

          当主线程在这个线程中执行时,如果遇到循环导致在指定位置停留时间过长,无法执行下面的程序。解决这个问题我们实现主线程解决一个循环,由另一个线程负责其他代码的执行。实现多部分代码同时执行,这就是多线程技术可以解决的问题。

       如何在java中创建线程呢?

      看文档java api中的thread类中的描述,创建线程有两种方式:

      1.继承Thread类

        1.1定义一个类继承Thread

        1.2重写run()方法

        1.3创建一个子类对象,就是创建线程对象

        1.4调用start方法,开启线程并让线程执行,同时还会告诉jvm去调用run方法。

          为什么不直接调用run()方法?

          答:如果直接调用run方法,在java中以栈的形式来存放,它将会先把mian()方法放入栈中,然后在放一个run()方法,接下来在上面的列子中首先是d1调用,执行完了之后,d2调用,这样变成了顺序执行,结果还是存在循环问题。是的主线程还是负责两个线程。如图:

    更改如下图:

     

    这样的结果还是没有什么变化,这是因为主线程创建完对象之后,开始执行d1.run()方法,在这还是没有对d2.run()方法进行开启,所以结果还是没有什么变化。所以要在d1.run()方法调用前应该调用d2.start()方法,对d2的线程先开启这样就可以了。

    还有一部分内容在下面的链接中:http://www.cnblogs.com/txdd-tg/p/8763426.html

  • 相关阅读:
    nmon监控及分析(转)
    Python资源大全
    pyqt4使用简易笔记
    windows下 使用pyinstaller 打包os.Popen()问题
    用pyautogui操作windows
    jmeter 报错:java.net.BindException: Address already in use: connect
    jmeter 报错Non HTTP response code: org.apache.http.conn.ConnectTimeoutException
    vue父子组件通信
    centos6.7安装mysql-5.7
    linux下 多python环境 修改默认python2为python3
  • 原文地址:https://www.cnblogs.com/txdd-tg/p/8760603.html
Copyright © 2011-2022 走看看