zoukankan      html  css  js  c++  java
  • Java多线程学习篇(一)

    多线程的目的:更高效的利用CPU

    创建任务和线程

      一个任务类必须实现Runnable接口,任务必须从线程运行。

      实现Runnable接口

    // 任务类
    public class TaskClass implements Runnable {
        public TaskClass(){
        }
    
        @Override // 实现Runnable中的run方法
        public void run() {
                // 将要运行的任务
        }
    }

      创建并运行任务  

    public class Client {
        public void someMethod(){
            //新建任务的实例
            TaskClass task = new TaskClass();
            //创建一个线程
            Thread thread = new Thread( task );
            //开始线程运行任务
            thread.start();  //这里若是 task.run(), 并没有运行新的线程
        }
    }

    多线程的创建有二种方法:

      1. 可以从Thread类从继承(因为Thread类实现了Runnable,但这方法将任务和运行任务机制混合在一起,并不推荐)

    class CustomThread extends Thread{
        public CustomThread(){
            
        }
        //改写Thread中的run方法
        public void run(){
            
        }
        public static void main(String[] args) {
            CustomThread thread1 = new CustomThread();
            thread1.start();
        }
    } 

      2. 实现Runnable方法 

    运行测试

    package MultiThread;
    
    public class TaskThreadDemo {
        public static void main(String[] args) {
    
            /* 输出的次数越多越明显 */
            Runnable printA = new PrintChar('A', 20);
            Runnable printB = new PrintChar('B', 20);
            Runnable printC = new PrintChar('C', 20);
            Thread threadA = new Thread(printA);
            Thread threadB = new Thread(printB);
            Thread threadC = new Thread(printC);
    
            /*
             * A,B,C 任意排序
             * BCCCCAAAAAAAAAAAACCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBBBAAAAAAAA
             * ACCCCCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAABBBBB
             * ACCCCCCCCCCCCCCCCCCCCBAAAAAAAAABBBBBBBBBBBBBBAAAAAAAAAABBBBB
            */
            threadA.start();
            threadB.start();
            threadC.start();
    
    
            /*
             * A,B,C 任意排序
             * AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCBBBBB
             * AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBCBCBCCCCCCCCCCBCCCBCCCCCBBBBB
             * ACCCCCCCCCCCCCCCCCCCCBAAAAAAAAABBBBBBBBBBBBBBAAAAAAAAAABBBBB
            */
    //        threadA.start();
    //        threadB.start();
    //        printC.run();
    
    
            /*
             * A 在任意位置, B 一定在 C 的前面
             * AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCC
             * BBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAAAAA
             * BAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCC
             * BBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCAAAAAAAAAAAACCCCCCCCAAAAAAAA
            */
    //        threadA.start();
    //        printB.run();
    //        printC.run();
    
    
            /*
             *  A, B, C 顺序
             *  AAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCC
            */
    //        printA.run();
    //        printB.run();
    //        printC.run();
    
        }
    }
    class PrintChar implements Runnable {
        private char charToPrint;
        private int times;
    
        PrintChar(char charToPrint, int times) {
            this.charToPrint = charToPrint;
            this.times = times;
        }
    
        @Override
        public void run() {
            for (int i = 1; i <= times; ++i) {
                System.out.print(charToPrint);
            }
        }
    }
    多线程测试
  • 相关阅读:
    微信公众号开发之用户地理位置坐标转百度坐标
    PHP变量入门教程(1)基础
    【很变态】PHP类实例化对象竟然可以访问类的“静态(static)方法”!!!
    【转】记录PHP、MySQL在高并发场景下产生的一次事故
    PHP返回32位与16位的md5加密值
    PhpStorm 8.x/9.x 快捷键设置/个性化设置,如何多项目共存?如何更换主题?
    Linux设置Memcached开机启动
    【荐】MongoDB基本命令大全
    【荐】PHP操作MongoDB GridFS 存储文件,如图片文件
    Shell入门教程:流程控制(7)break和continue
  • 原文地址:https://www.cnblogs.com/lkcc/p/8079248.html
Copyright © 2011-2022 走看看