java线程和线程池

参考1

参考2

参考3(线程与进程)

参考4(线程与进程)

参考4(线程池)

1.什么是线程:操作系统能够进行运算调度的最小单位,它被包含再进程中,是进程中的实际运作单位。

2.什么是进程:操作系统分配资源的基本单位,一般情况下,一个运行的程序就可以说是一个进程。

3.为什么使用线程:

    1>执行耗时任务。

    2>提高CPU的利用率。

4.为什么使用多进程:

    1>获取更多的内存分配,分担主进程的内存压力。

    2>防止进程被杀死。

5.线程与进程的区别:线程是进程的子集,一个进程可以拥有多个线程,每个线程并行执行不同的任务,

  不同的进程使用不同的内存空间,同一进程中的所有线程共享相同的内存空间。

6.优缺点:

  1>线程执行开销小,但是不利于资源的管理和保护,线程适合在SMP机器(双CPU系统)上运行。

  2>进程执行开销大,但是能够很好的进行资源的管理和保护,进程可以跨机器运行。

7.线程的四种创建方式:

   1.继承Thread类创建线程。

   2.实现Runnable接口创建线程。

   3.使用Callable和Future创建线程。

   4.使用线程池。如:Executor框架

2.四种创建线程的实例

方式1:

public class Main {
    public static void main(String[] args) {
        new MyThread().start();
    }
}
class MyThread extends Thread{
    @Override
    public void run() {
        super.run();
        System.out.println("戒急、戒躁!");
    }
}

方式2:

public class Main1 {
    public static void main(String[] args) {
        new Thread(new MyThread1()).start();
    }
}
class MyThread1 implements Runnable{
    @Override
    public void run() {
        System.out.println("戒急、戒躁!");
    }
}

方式3:

public class CallableThreadTest implements Callable<Integer> {

    public static void main(String[] args) {
        CallableThreadTest ctt=new CallableThreadTest();
        FutureTask<Integer> ft=new FutureTask<Integer>(ctt);
        for (int i=0;i<100;i++){
            System.out.println(Thread.currentThread().getName()+"的循环变量i的值"+i);
            if (i==20){
                new Thread(ft,"有返回值的线程").start();
            }
        }
        try {
            System.out.println("子线程的返回值:"+ft.get());
        }catch (InterruptedException e){
            e.printStackTrace();
        }catch (ExecutionException e){
            e.printStackTrace();
        }
    }

    @Override
    public Integer call() throws Exception {
        int i=0;
        for (;i<100;i++){
            System.out.println(Thread.currentThread().getName()+"==="+i);
        }
        return i;
    }
}

方式4:

public class ThreadPool {
    private static int POOL_NUM=10;

    public static void main(String[] args) {
        ExecutorService executorService=Executors.newFixedThreadPool(5);
        for (int i=0;i<POOL_NUM;i++){
            RunnableThread thread=new RunnableThread();
            executorService.execute(thread);
        }
    }
}
class RunnableThread implements Runnable{
    private int THREAD_NUM=10;
    @Override
    public void run() {
        for (int i=0;i<THREAD_NUM;i++){
            System.out.println("线程"+Thread.currentThread()+"   "+i);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值