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);
            }
        }
    }
    多线程测试
  • 相关阅读:
    Hive
    Hadoop简介与分布式安装
    Hadoop分布式文件系统HDFS
    HDFS的操作SHELL和API
    HDFS高级功能
    Yarn
    Hadoop的I/O操作
    Hadoop的RPC工作原理
    Mapreduce入门和优化方案
    MapReduce的工作机制
  • 原文地址:https://www.cnblogs.com/lkcc/p/8079248.html
Copyright © 2011-2022 走看看