码迷,mamicode.com
首页 > 编程语言 > 详细

多线程

时间:2017-08-24 15:01:07      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:art   service   void   ice   线程同步   cat   一个   使用   构造   

1.线程的概念:

多线程使得程序中的多个任务可以同时执行。Java的重要功能之一就是内部支持多线程,在一个程序中运行同时运行多个任务。

线程:一个程序可能包含多个同时运行的任务。线程是指一个任务从头至尾的执行流程。

在java中,每个任务都是Runnable接口的一个实例,也称为可运行对象(runnable object).线程本质上讲就是便于任务执行的对象。

2.创建任务和线程:

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

实例:

第一个任务打印字符 a 100次;

第二个任务打印字符 b 100次;

第三个任务打印字符 1到100的整数;

这三个线程讲共享CPU,并且在控制台上轮流打印字母和数字。

package TaskThread;

public class TaskThreadDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Runnable printA = new PrintChar(‘a‘, 100);
        Runnable printB = new PrintChar(‘b‘, 100);
        Runnable print100 = new PrintNum(100);
        
        Thread thread1 = new Thread(printA);
        Thread thread2 = new Thread(printB);
        Thread thread3 = new Thread(print100);
        
        thread1.start();
        thread2.start();
        thread3.start();

    }

}

class PrintChar implements Runnable{
    private char charToPrint;
    private int times;
    
    public PrintChar(char c ,int t) {
        charToPrint = c;
        times = t;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        for(int i = 0; i < times; i++) {
            System.out.println("PrintChar" + charToPrint);
        }
    }
    
}

class PrintNum implements Runnable{
    private int lastNum;

    public PrintNum(int n) {
        lastNum = n;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        for (int i = 0; i <= lastNum; i++) {
            System.out.println(" " + i);
        }
    }
    
}

调用start()方法启动一个线程,它会导致任务中的run()方法被执行。

 

3.Thread类:

Thread类包含为任务而创建的线程的构造方法,以及控制线程的方法。 

 方法 sleep(long mills) 可以将改线程设置为休眠以保障其他线程的执行。如果一个循环中调用了sleep方法,那就应该讲这个循环放在try-catch块中。

 

4.线程池:

可以使用线程池来高效的执行任务。

线程池是管理并发执行任务个数的理想方法。Java提供Executor接口来执线程池中的任务,提供ExecutorService接口来管理和控制任务。

ExecutorService executor = Executors.newFixedThreadPool(3); 创建了一个最大线程数为3的线程池执行器。
package TaskThread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecutorsDemo {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ExecutorService executor = Executors.newFixedThreadPool(3);
        
        executor.execute(new PrintCharA(‘a‘,150));
        executor.execute(new PrintCharA(‘b‘,180));
        executor.execute(new PrintNumA(190));

        executor.shutdown();

    }

}

class PrintCharA implements Runnable{
    private char charToPrint;
    private int times;
    
    public PrintCharA(char c ,int t) {
        charToPrint = c;
        times = t;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        for(int i = 0; i < times; i++) {
            System.out.println("PrintChar" + charToPrint + "--" + i);
        }
    }
    
}

class PrintNumA implements Runnable{
    private int lastNum;

    public PrintNumA(int n) {
        lastNum = n;
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        for (int i = 0; i <= lastNum; i++) {
            System.out.println(" " + i);
        }
    }
    
}

 

 

shutdown()通知执行器关闭。不能接受新的任务,但是现有的任务将继续执行直至完成。

 

5.线程同步:

 

多线程

标签:art   service   void   ice   线程同步   cat   一个   使用   构造   

原文地址:http://www.cnblogs.com/taiguyiba/p/7422800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!