zoukankan      html  css  js  c++  java
  • JAVA入门到精通-第38讲-线程-坦克大战6

     应用程序在内存中开辟空间-进程;
     内存-大脑容量;
      
     反应切换的速度-CPU;
     试图去尝试别的进程的地址空间---病毒;
     
    线程是由进程(应用程序)创建的;
    涉及到并发,就会涉及到线程;迅雷下载;
     
     
     线程不会跑出到进程外面去的;

     地址空间是由操作系统和JVM决定的;
     32/64位,CPU的寻址空间范围,加载内存的大小;

     线程的调度:
     CPU、内存资源OK?--->Running,运行状态;
     运行过程CPU,内存不够---->Blocked,阻塞状态;
     资源空闲,可用------->Runnable可运行状态;
     最后,退出程序---->Dead死亡;  

     (和人出生,生病,工作,死亡一样的
     
     
     JAVA中任何一个类都可当做线程来使用;

     
    没有手动调用,通过start会启动进程;

    休眠-blocked状态;
    sleep会导致线程进入阻塞状态;释放资源;
     sleep可以定时,做定时器;数据库的清洗;
     Blocked-Runnable-Running不停转;
     转10次以后,自动死亡-times:
     
     退出循环,线程死亡了。
     
     
     JAVA中不允许多继承,Panel类已经继承了JPanel,
     JAVA中的Panel类,通过Runnable接口实现多线程:
     class Dog implements Runnables;
     重写run函数;
     启动的时候先创建线程对象;
     把dog放进去;
     
     ---------------------------------------------
    线程--什么是进程
    进程--概念
    要解释线程,就必须明白什么是进程,就好象要搞清中国历史,就必须要了解春秋战国。
    什么是进程呢?
    进程是指运行中的应用程序,每个进程都有自己独立的地址空间(内存空间),比如用户点击桌面的IE浏览器,就启动了一个进程,操作系统就会为该进程分配独立的地址空间。当用户再次点击左面的IE浏览器,又启动了一个进程,操作系统将为新的进程分配新的独立的地址空间。目前操作系统都支持多进程。
    要点:用户每启动一个进程,操作系统就会为该进程分配一个独立的内存空间。

    线程--概念
    在明白进程后,就比较容易理解线程的概念。
    什么是线程呢?
    是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。线程有就绪、阻塞和运行三种基本状态。
    线程
    1、线程是轻量级的进程
    2、线程没有独立的地址空间(内存空间)
    3、线程是由进程创建的(寄生在进程)
    4、一个进程可以拥有多个线程-->这就是我们常说的多线程编程
    5、线程有几种状态:
      a、新建状态(new)
      b、就绪状态(Runnable)
      c、运行状态(Running)
      d、阻塞状态(Blocked)
      e、死亡状态(Dead)

    线程有什么用处
    java程序中流传一句话,不会使用线程就别跟别人说自己学过java。目前绝大部分应用程序都会涉及到多并发的问题。只要应用程序涉及到并发,就离不开多线程编程。

    线程--如何使用
    在java中一个类要当作线程来使用有两种方法。
    1、继承Thread类,并重写run函数
    2、实现Runnable接口,并重写run函数
    因为java是单继承的,在某些情况下一个类可能已经继承了某个父类,这时在用继承Thread类方法来创建线程显然不可能java设计者们提供了另外一个方式创建线程,就是通过实现Runnable接口来创建线程。

    通过继承Thread类来实现建立线程实例[Thread01.java]
     
    34
     
    1
    /**
    2
     * 演示如何通过继承Thread来开发线程
    3
     */
    4
    public class Thread01 {
    5
        public static void main(String[] args) {
    6
            //创建一个 Cat对象
    7
            Cat cat=new Cat();
    8
            //启动线程
    9
            cat.start();//.start()会导致run函数运行
    10
        }
    11
    }
    12
    13
    class Cat extends Thread{
    14
        int times=0;
    15
        //重写run函数
    16
        public void run(){
    17
            while(true){
    18
                //休眠一秒
    19
                //1000表示1000毫秒
    20
                try {
    21
                    Thread.sleep(1000);//sleep就会让该线程进入到Blocked阻塞状态,并释放资源。
    22
                } catch (Exception e) {
    23
                    e.printStackTrace();
    24
                }
    25
                times++;
    26
                System.out.println("hello,world!"+times);
    27
                if(times==10){
    28
                    //退出线程
    29
                    break;
    30
                }
    31
            }
    32
        }
    33
    }
    34
     
    ----------------------------------------
    通过Runnable接口来实现建立线程实例[Thread02.java]
    x
     
    1
    /**
    2
     * 演示如何通过Runnable接口来开发线程
    3
     */
    4
    public class Thread02{
    5
        public static void main(String []args){
    6
            Dog dog=new Dog();
    7
            //创建线程
    8
            Thread t=new Thread(dog);
    9
            //启动线程
    10
            t.start();
    11
        }
    12
    }
    13
    class Dog implements Runnable{//创建Runnable接口
    14
        public void run(){//重写run函数
    15
            int times=0;
    16
            while(true){
    17
                try{
    18
                    Thread.sleep(1000);
    19
                }catch (Exception e) {
    20
                    e.printStackTrace();
    21
                }
    22
                times++;
    23
                System.out.println("hello,wrold!"+times);
    24
                if(times==10){
    25
                    break;
    26
                }
    27
            }
    28
        }
    29
    }
    30
     




  • 相关阅读:
    smarty的学习
    用接口实现封装的一个mysqli工具类
    centos7/8安装java和mysql
    Mysql 8.0 忘记密码报错1045办法,skip-grant-tables不管用
    卸载vivo手机自带的应用程序
    DevOps的学习(一)
    quartzy的spring注入问题
    html加载执行的顺序
    关于时间Date转换成long类型的方法(时间戳的转换)
    系统中出现乱码
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10045741.html
Copyright © 2011-2022 走看看