zoukankan      html  css  js  c++  java
  • 多线程(01)

    1. 线程是进程中的内容
    2. 每个程序中都必须有线程,因为线程是程序中的控制单元
    3. 进程:是一个正在执行中的程序,每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元
    4. 线程:就是进程中一个独立的控制单元,线程在控制着进程的执行
    5. 一个进程中至少有一个线程
    6. 命令行编译java:

    Cd是进入子目录,首先是javac 编译成为.class文件,之后在运行java

    1. java VM(java虚拟机)启动的时候就会有一个进程java.exe,该进程中至少有一个线程负责java程序的执行,并且这个线程运行的代码存在于main方法中,该线程称之为主线程
    2. 扩展:更细节说明jvm,jvm启动不止一个线程,还有负责垃圾回收机制的线程
    3. 通过对api的查找,Java.lang 中的类Thread 创建线程

    第一种创建线程的方式:继承Thread类,复写run方法(目的:将自定义的代码存储在run方法中,让线程运行),调用线程的start方法,该方法有两个作用:(1)启用线程(2)调用run方法

    1. 双核CPU :好多程序可以同时跑起来,更快。
    2. 发现运行结果每一次都不同:因为多个线程都在获取CPU的执行权,cpu执行到谁,谁就运行。明确一点,在某一个时刻,只能有一个程序在运行(多核除外)
    3. CPU在做着快速的切换,以达到看上去相同运行的效果。我们可以形象的把多线程的运行行为在互相抢夺cpu的执行权,这就是多线程的一个特性:随机性,谁抢到谁执行,至于执行多长时间,cpu说的算
    4. 为什么覆盖run方法?

    Thread类用于描述线程,该类就定义了一个功能,用于存储线程要运行的代码,该存储的功能就是run方法,也就是说Thread类中的run方法,用于存储线程要运行的代码

    虚拟机定义了主线程,在main中

    注意在多线程中调用继承了Thread的类  调用.strat()方法和.run()方法的区别:

    • d.start(); // 开启线程并执行该线程的run方法
    • d.run();//仅仅是对象调用方法,线程创建了但并未运行

    代码例子:

    package sxy;
    
    class Demo extends Thread {
        public void run() { // 重写run方法
            for(int i=0;i<20;i++){
                System.out.println("demo run"+i);
            }
            
        }
    
    }
    
    public class Helloworld {
    
        /**
         * @param args
         */
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Demo d = new Demo();  //创建了一个线程
            d.start();  // 开启线程并执行该线程的run方法
            //d.run();//仅仅是对象调用方法,线程创建了但并未运行
          
            for(int i=0;i<20;i++){
                System.out.println("hello world"+i);
            }
    
        }
    
    }

    调用.start()每次运行的结果都是不一样的

     调用.run()方法 则就是执行完run方法中的for循环,再执行main函数里面的for循环

    线程的状态:

    Thread中的一些方法

    1.Thread.currentThread(): 静态的 ,返回对当前正在执行的线程对象的引用 Thread.currentThread()=this   

    2..getName() 得到当前线程的名字

    3.设置线程的名称:.setName()或者构造函数

    实现多线程的第一种方法:

     1.实现简单的买票,多个窗口可以实现同时买票:

    package sxy;
    
    class Tickect extends Thread {
        private static int tick = 100;  //限制总的票数,否则四个进程四个
        public void run() {
            while (true) {
                if (tick > 0) {
                    System.out.println(Thread.currentThread().getName()
                            + "---sale--" + tick--);
                }
            }
    
        }
    
    }
    
    public class TicketDemo {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Tickect t1 = new Tickect();
            Tickect t2 = new Tickect();
            Tickect t3 = new Tickect();
            Tickect t4 = new Tickect();
            t1.start();
            t2.start();
            t3.start();
            t4.start();
    
        }
    
    }
  • 相关阅读:
    Leetcode:linked_list_cycle
    关于Go语言共享内存操作的小实例
    程序猿如同妓女
    算法——排序算法个人总结
    CentOS 6.4下安装和配置Samba 第2页_服务器应用_Linux公社-Linux系统门户网站
    解决fedora samba在windows下无权限访问的问题
    基于samba实现win7与linux之间共享文件_阳仔_新浪博客
    增加samba用户提示Failed to add entry for user
    Ubuntu+Win7+Samba实现文件共享_Linux教程_Linux公社-Linux系统门户网站
    Mycat 月分片方法
  • 原文地址:https://www.cnblogs.com/sunxiaoyan/p/8543985.html
Copyright © 2011-2022 走看看