理论:
临界资源
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