前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java(多线程②)

Java(多线程②)

作者头像
全栈开发日记
发布2022-05-12 20:26:51
6360
发布2022-05-12 20:26:51
举报
文章被收录于专栏:全栈开发日记

线程池

JDK1.5之后,实现了线程池程序;

java.util.concurrent

类Executors:工厂类,创建线程池工厂;

(方法)static ExecutorService newFixedThreadPool(int nThreads):创建池子,参数为个数,返回值为线程池对象;

步骤:

1、创建线程池对象;

2、创建Runnable接口子类对象;

3、提交Runnable接口子类对象;

测试类

代码语言:javascript
复制
ExecutorService es = Executors.newFixedThreadPool(2);//创建线程池
es.submit(new RunnableDemo());

Runnable接口实现类

代码语言:javascript
复制
public class RunnableDemo implements Runnable{
    @Override
    public void run(){
            System.out.println(Thread.currentThread().getName()+"的方法");
    }
}

执行结果

代码语言:javascript
复制
ExecutorService es = Executors.newFixedThreadPool(2);//创建线程池
es.shutdown();//停止线程池

创建线程的方式③(实现Callable接口

实现步骤:

1、工厂类Executors静态方法newFixedThreadPool方法,创建线程池对象;

2、线程池对象ExecutorService接口实现类,调用submit提交线程任务;

Future<T> submit(Callable c)

Future的get()方法获取线程任务的返回值

测试类

代码语言:javascript
复制
ExecutorService es = Executors.newFixedThreadPool(2);//创建线程池
Future<String> submit = es.submit(new CallableDemo());
String s = submit.get();
System.out.println(s);

实现类

代码语言:javascript
复制
public class CallableDemo implements Callable<String> {    @Override    public String call(){        return "abc";    }}

执行结果:abc

线程安全

解决安全问题,同步技术

代码语言:javascript
复制
synchronized(任意对象){
    线程要操作的共享数据
}
同步代码块

对象:同步锁,对象监视器;

保证安全,没有锁的线程不能执行;

学习草图

电影院售票案例

测试类

代码语言:javascript
复制
Tickets t=new Tickets();
Thread t0=new Thread(t);
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t0.start();
t1.start();
t2.start();

实现类

代码语言:javascript
复制
public class Tickets implements Runnable {
    int ticket=100;
    Object obj=new Object();
    @Override
    public void run() {
        while(true){
            synchronized (obj) {//任意对象,new Object()不可以
                if (ticket > 0) {
                    try {
                        Thread.sleep(1000);//休眠 单位为毫秒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName() + "出售第" + ticket--);
                }
            }
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档