促销活动
CodeGym University
学习
课程
任务
调查和小测验
游戏
帮助
提醒时间表
社区
用户
论坛
聊天
文章
成功故事
活动
评论
订阅服务
浅色主题
课程
评论
关于我们
开始
开始学习
立即开始学习
目标地图
课程
全部目标
全部级别
“wait-notify-notifyAll”策略
模块 2:Java 核心
第 12 级,
课程 7
“嗨,阿米戈!” “我想和你深入探讨 wait-notify。wait-notify 方法为线程交互提供了一种方便的机制。它们还可以用于构建复杂的线程交互高级机制。” “我将从一个小例子开始。假设我们有一个服务器程序,必须执行用户通过网站创建的各种任务。用户可以在不同时间添加各种任务。任务是资源密集型的,但我们服务器的 8 -核心处理器可以应付。我们应该如何在服务器上执行任务?” “首先,我们将创建一组工作线程,与处理器内核的数量一样多。每个线程都能够在自己的内核上运行:线程
一些细微差别
模块 2:Java 核心
第 12 级,
课程 8
“嗨,阿米戈!” “还有更多细节。我们称之为实用建议。” “假设你有一个等待某事并进入睡眠状态直到满足条件的方法。” 如果集合为空,那么我们等待 public synchronized Runnable getJob()
有关同步和多线程的其他详细信息
模块 2:Java 核心
第 12 级,
课程 9
“嗨,阿米戈!” “有一个很大的话题——Java 内存模型。基本上,您还不必了解它,但了解它会很有帮助。” “为了消除所有潜在的问题,Java 改变了它的内存管理机制。现在内存不再简单地分为线程的本地缓存和全局内存——这种机制甚至更好。” “而且更复杂!” “是的,更好,更复杂。就像飞机。坐飞机比走路好,但更复杂。我会尽量简单地解释新情况。” “这就是他们想出的。一种用于同步本地线程内存的机制,称为‘happens-before’,被添加到代码中。发明了几个规则/条件。当满足
教授提供的有用链接 — 16
模块 2:Java 核心
第 12 级,
课程 10
当然,从不同角度看同一个材料也很有帮助,因为每个人的想法不同,或许对你来说最好的理论来源不一定适合你的朋友。教授特意为你找到一个非常有趣的在线课程,可以教你更多有关线程的知识。
线程组
模块 2:Java 核心
第 13 级,
课程 0
“嗨,阿米戈!” “我们将开始对线程进行更彻底的探索。” "引入线程组的概念是为了防止一个线程重复停止和打断其他线程。一个线程只能影响同一个线程组中的其他线程。ThreadGroup是一个管理线程组的类。这种方式可以保护线程来自不需要的更改。” “有时你必须运行你不能完全信任的代码。所以将它的所有线程放在一个单独的组中并阻止它们干扰主线程组的工作是很方便的。” “一个线程组可以包含其他组。这使您可以在分层树中组织所有线程和组。在这样的树中,每个线程组(初始组除外)都有自己的父
线程优先级
模块 2:Java 核心
第 13 级,
课程 1
“让我们继续我们的课程。什么是线程优先级以及为什么需要它们? “在现实世界的问题中,不同线程正在执行的工作的重要性可能相差很大。线程优先级的概念是为了控制这个过程而创建的。每个线程都有一个优先级,由 1 到 10 之间的数字表示。” “10是最高优先级。” “1是最低的。” “如果没有给出优先级,则线程获得优先级 5(正常)。” 线程的优先级不会显着影响它的工作,而是更多的建议。如果有多个休眠线程需要运行,Java机器会先启动一个优先级高的线程。 “Java 机器按照它认为合
工厂方法模式
模块 2:Java 核心
第 13 级,
课程 2
此时,您可能已经遇到了设计模式。例如,单例。 让我们回顾一下什么是模式,为什么需要它们,什么是创建型模式(单例模式就是一个例子)。我们还将研究一种新模式:工厂方法。 在软件开发中,设计模式是一种可重复的架构构造,表示在某些重复出现的上下文中对设计问题的解决方案。 通常,模式不是可以直接转换为代码的最终解决方案。它只是可以在各种情况下使用的问题的模型解决方案。 创建型模式是处理对象创建过程的设计模式。它们使创建一个独立于用于创建、组合和呈现对象的方法的系统成为可能。 工厂方法是
可赎回和未来
模块 2:Java 核心
第 13 级,
课程 3
可运行问题 您已经熟悉Runnable接口和实现它的Thread类。让我们回忆一下这个界面是什么样子的: public interface Runnable {
ExecutorService接口
模块 2:Java 核心
第 13 级,
课程 4
为什么需要 Executor 接口? 在 Java 5 之前,您必须在应用程序中编写所有自己的线程管理代码。此外,创建一个新线程object 是一个资源密集型操作,为每个轻量级任务创建一个新线程没有意义。并且因为这个问题对于多线程应用程序的每个开发人员来说绝对是熟悉的,所以他们决定将此功能作为Executor框架引入 Java 。 有什么好主意?很简单:不是为每个新任务创建一个新线程,线程被保存在一种“存储”中,当一个新任务到达时,我们检索一个现有线程而不是创建一个新线程。
停止一个 ExecutorService
模块 2:Java 核心
第 13 级,
课程 5
考虑一个简单的程序: public static void main(String[] args) throws Exception {
线程池执行器
模块 2:Java 核心
第 14 级,
课程 0
在开发多线程应用程序时,我们通常必须处理组织线程的工作。我们的应用程序越大,多线程任务所需的线程越多,可运行我们创建的对象。 这里需要注意的是,在 Java 中创建线程是一个相当昂贵的操作。如果我们每次都创建一个线程的新实例来执行一个操作,我们会在性能上遇到很大的问题,结果会影响应用程序的健康。 线程池和ThreadPoolExecutor在这里为我们提供帮助。 线程池是一组预先初始化的线程。它的大小可以是固定的或可变的。 如果任务多于线程,则任务在任务队列中等待。池中的第
newSingleThreadExecutor 方法
模块 2:Java 核心
第 14 级,
课程 1
为什么您可能需要 1 个线程的 ExecutorService? 您可以使用Executors.newSingleThreadExecutor方法创建一个ExecutorService,它带有一个包含单个线程的池。pool的逻辑如下: 该服务一次只执行一项任务。 如果我们提交N个任务执行,所有N个任务都会被单线程一个接一个地执行。 如果线程被中断,将创建一个新线程来执行任何剩余的任务。 让我们想象一下我们的程序需要以下功能的情况: 我们需要在 30 秒内处理用户请求,但单位时
显示更多
1
...
18
19
20
21
22
...
35
Please enable JavaScript to continue using this application.