• java 线程 (一) Thread


    package cn.sasa.demo1;
    
    public class Test {
        public static void main(String[] args) throws InterruptedException {
            /**
             * 进程:
             * 进程指正在运行的程序。当一个程序进入内存运行,即变成一个进程
             * 进程是处于运行过程中的程序,并具有一定独立功能
             * 
             * 线程:
             * 线程是进程中的一个执行单元,负责当前进程中程序的执行
             * 一个进程至少有一个线程,一个进程可以有多个线程
             * 
             * 线程的运行模式:
             * a、分时调度
             *     所有线程 轮流使用 CPU的使用特权,平均分配每个线程占用CPU 的时间
             *     
             * b、抢占式调度
             *     优先让 优先级高的线程使用CPU, 如果线程的优先级相同,那么就随机选择一个(线程的随机性)
             *     java使用抢占式调度
             *     
             * 对于CPU的一个核而言,某个时刻,只能执行一个线程,
             * 多线程程序并不能提高程序的运行速度,但能提高程序运行效率,让CPU的使用率更高
             * 
             * 创建线程的目的:
             * 建立程序单独运行的执行路径,让多部分代码实现同时执行。
             * 
             * 创建新执行线程有两种方法:
             * a、声明Thread的子类,重写run方法。创建对象,开启线程。run相当于其他线程中的main方法
             * b、声明Runnable接口的实现类,实现run方法。
             * 
             * public class Thread implements Runnable {...}
             * 
             * public interface Runnable {
             *         public abstract void run();
             * }
             * 
             * 为什么调用Thread的start方法 而不是直接调用 run方法
             * run方法不开启线程,只是调用对象的方法
             * start开启线程,并让JVM调用run方法在开启的线程中执行
             * 
             * 
             * 
             */
            
            //Thread子类创建线程
            MyThread th1 = new MyThread();
            th1.setName("线程名字");//修改名字要在start之前,一般不需要修改
            th1.start();
            th1.getName();
            
            //Runnable接口的方式
            //一般用这种方式,将执行的任务分离出来
            Thread th3 = new Thread(new MyRunnable());
            th3.start();
            
            //currentThread 当前执行的线程
            System.out.println(Thread.currentThread().getName());
            
            //使用匿名内部类,实现多线程
            //方式一:继承
            //方式二:实现接口
            new Thread() {
                public void run() {
                    System.out.println("lalalala");
                }
            }.start();
            
            
            new Thread(new Runnable() {
                public void run() {
                    System.out.println("hahaha");
                }
            }).start();
            
            for(int i=0; i<5; i++) {
                //sleep 休眠多少毫秒
                Thread.sleep(1000);
                System.out.println(i);
            }
            
        }
    }
    package cn.sasa.demo1;
    
    public class MyThread extends Thread{
        public void run() {
            System.out.println(getName());
            for(int i=0;i<60;i++) {
                System.out.println("thread1-----run"+i);
            }
            
        }
        
    //    public MyThread() {
    //        super("线程的名字1");
    //    }
    }
    package cn.sasa.demo1;
    
    public class MyRunnable implements Runnable{
    
        @Override
        public void run() {
            for(int i = 0; i<60; i++) {
                System.out.println("runnable......"+i);
            }
        }
    
    }
  • 相关阅读:
    Android layout属性大全
    如何看懂Code128条形码
    二维码
    在线条形码生成器
    GS1已分配给国家(地区)编码组织的前缀码
    POJ 3321 Apple Tree DFS序+fenwick
    bootstrap之WaitForIdle&amp;&amp;Clear
    ubuntu14操作系统chrome标签和书签乱码解决
    动态规划-hdoj-4832-百度之星2014初赛第二场
    截取符合指数分布的一部分样本的理论与实验
  • 原文地址:https://www.cnblogs.com/SasaL/p/10184787.html
Copyright © 2020-2023  润新知