线程开发中的资源操作

理论:

  临界资源

    PV操作:通过信号量机制进行维护关系资源的安全---看看操作系统....

  任务对资源进行操作,为了安全要加锁,锁加载临界资源操作上(也就是对共享资源的操作)

    加锁

      共享资源操作

    解锁

编程模型:

   1.通过锁

   2.threadLocal

   3.final

例子:

public static void main(String[] args) {

        JobLanuch jobLanuch = new JobLanuch();

        Task_A task_a = new Task_A(jobLanuch.threadLocal);
        Task_B task_b =  new Task_B(jobLanuch.threadLocal);

        jobLanuch.submit(task_a);
        jobLanuch.submit(task_b);

    }

    public static class JobLanuch {
        private ExecutorService executor = Executors.newFixedThreadPool(10);

        //共享资源
        public ThreadLocal<String> threadLocal = new ThreadLocal<String>() {

            //初始化资源
            @Override
            protected String initialValue() {
                return "initThreadLocal";
            }

        };

        void submit(Runnable runnableTask) {
            executor.submit(runnableTask);
        }

    }

    public static class Task_A implements Runnable {

        //共享资源接入点
        private ThreadLocal<String> threadLocal;

        public Task_A(ThreadLocal<String> threadLocal) {
            this.threadLocal = threadLocal;
        }

        @Override
        public void run() {
            threadLocal.set("Task_A-50");

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //具体的业务挂接点.....
            System.out.println("Task_A do...." + "\n" + threadLocal.get());

        }

    }

    public static class Task_B implements Runnable {

        //共享资源接入点
        private ThreadLocal<String> threadLocal;

        public Task_B(ThreadLocal<String> threadLocal) {
            this.threadLocal = threadLocal;
        }

        @Override
        public void run() {
            threadLocal.set("Task_B-50");
            //具体的业务挂接点.....
            System.out.println("Task_B do...."+ "\n" + threadLocal.get());
        }

    }
public static void main(String[] args) {

        //job管理器
        JobLanuch jobLanuch = new JobLanuch();

        //任务
        Task_A task_a = new Task_A(jobLanuch.lists);//挂接上共享资源
        Task_B task_b = new Task_B(jobLanuch.lists);//挂接上共享资源

        //提交任务
        jobLanuch.submit(task_a);
        jobLanuch.submit(task_b);
    }

    public static class JobLanuch {
        // 线程池
        private ExecutorService executor = Executors.newFixedThreadPool(10);

        // 共享资源
        public volatile List<String> lists = new ArrayList<String>();

        public JobLanuch() {

            // 模拟初始化资源
            lists.add("apple");
            lists.add("balanca");

        }

        // 提交任务
        public void submit(Runnable runnableTask) {
            executor.submit(runnableTask);
        }

    }

    public static class Task_A implements Runnable {
        //共享资源
        public volatile List<String> lists;

        public Task_A(List<String> lists) {
            this.lists = lists;
        }

        @Override
        public void run() {

            try {
                //模拟业务操作...可能是低效的网络IO...
                lists.add(0, "Task_A put new Apple doing....");
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 具体的业务挂接点.....
            System.out.println("Task_A do....:" + lists.get(0) );

        }

    }

    public static class Task_B implements Runnable {
        //共享资源
        public volatile List<String> lists;

        public Task_B(List<String> lists) {
            this.lists = lists;
        }

        @Override
        public void run() {
            // 具体的业务挂接点.....
            System.out.println("Task_B do....:" + lists.get(0) );
            lists.add(0,"Task_B put a apple finish !!!");
        }

    }
时间: 2024-10-16 22:57:18

线程开发中的资源操作的相关文章

Android开发中的耗时操作总结

Android开发中的耗时操作总结 在Android软件开发过程中,经常遇到耗时操作.为了使手机app运行流畅,耗时操作需要在新的一个线程中完成.那么,Android手机应用开发中,耗时操作有哪些呢?下面来总结一下. 下载文件操作 网络连接操作(尤其是网络不好的时候) 音频格式转换操作 文件操作 比较大的数据的初始化操作 sleep函数等 注: 具体的功能还得根据业务需求来完成.

C#开发中使用Npoi操作excel实例代码

C#开发中使用Npoi操作excel实例代码 出处:西西整理 作者:西西 日期:2012/11/16 9:35:50 [大 中 小] 评论: 0 | 我要发表看法 Npoi 是什么? 1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.Npoi 下载地址:http://npoi.codeplex.com/releases/view/38113 3.Npoi 学习系列教程推荐:http://www.cnblogs.com

【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践

提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OSS(https://www.aliyun.com/product/oss) 4.HTTPS(http://baike.baidu.com/view/14121.htm) 阅读目录结构 引: 一.准备工作 二.整体功能结构 三.具体实现步骤 四.关键点和问题处理 五.延伸与扩展 六.总结与思考 引:

实战开发中UI资源制作标准

资源制作标准设定建议 1.所有的UI资源全部采用PNG导出 因为Unity不支持外部压缩,所以,不论是用PNG还是JPG,只要尺寸相同,资源量在引擎中都会是一样大.所以,可以大胆地采用PNG进行输出,以保留和实现更好的色彩效果. 2.设定好一个客户端的标准分辨率 是1920*1080还是1280*768 3.提前考虑是否需要跨平台 4.和美术人员约定非常大的图片尽可能采用九宫格 5.会用作Sprite的UI元件尽量以最小尺寸切 对于大量的UI小元件,例如图标.按钮等,尽量让美术人员以最小尺寸切.

JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用

Hibernate框架概述 什么是Hibernate? 框架:软件的半成品,完成部分代码的功能. Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思想来操作数据库.Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序中使用,也可以在Servlet/JSP的web应用程序中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成

开发中的辅助工具(六)

今天我们来看一看开发中的辅助工具,那么什么是开发环境呢?在我们的印象中,开发环境就指的是编写代码的环境.其实不然,开发环境包括三大部分:构建环境.调试环境以及测试环境.构建环境便指得是代码编写.程序编译以及版本控制等:调试环境则指的是用于定位问题的辅助工具集:测试环境指的是用于验证目标程序是否满足用户的显性需求和隐形需求.显性需求指的是客户的要求,而隐形需求则指的是一些用户没有要求到的但是必须具备的要求.比如一个应用程序在 win7 系统上可以运行起来,在 win10 系统上也要能运行起来. 在

C开发 中原子性操作 , 除了快什么都不剩下了

题外话 今天,听歌曲听到一首缅怀迈克尔·杰克逊的歌曲 如下: http://music.163.com/#/song?id=1696048  Breaking News 每次听迈克尔 音乐,特别有战斗力,特别兴奋,学起技术来也特别带感,推荐喜欢的人试试. #include <stdio.h> int man(int argc, char* argv[]) { printf("Hope you are better %s\n","Michael Jackson&qu

谈谈多线程开发中的线程和任务的理念

前段时间写了一个iOS端的数据统计SDK,数据统计有些复杂的计算和数据上报操作.由于有些操作比較耗时.所以不得不在后台线程进行操作,由此引发了我对多线程的思考,在iOS开发中,一般非常难再见到直接使用NSThread进行多线程编程的了.由于苹果提供了另外几种多线程开发的解决方式.而这些解决方式面向的不再是线程,而是面向的是任务,以下就来以iOS和Android为例简单谈谈的线程和任务的相关概念. 线程: 我们在学习基础的编程语言的时候,肯定听说过线程的概念,线程是操作系统调度的最小单位,共享进程

ios开发中 线程、进程即多线程简单介绍

本文转自:原文http://www.cnblogs.com/wendingding/p/3805088.html 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线