当前位置: 首页 > news >正文

怎么注册一个网站做色流小企业网站建设平台

怎么注册一个网站做色流,小企业网站建设平台,百度热搜排名,网站改版介绍Java线程最鲜为人知的事实和用例是什么#xff1f; 有些人喜欢爬山#xff0c;有些人喜欢跳伞。 我#xff0c;我喜欢Java。 我喜欢它的一件事是#xff0c;您永不停止学习。 您每天使用的工具通常可以向您展示全新的方面#xff0c;以及您还没有机会看到的方法和有趣的用… Java线程最鲜为人知的事实和用例是什么 有些人喜欢爬山有些人喜欢跳伞。 我我喜欢Java。 我喜欢它的一件事是您永不停止学习。 您每天使用的工具通常可以向您展示全新的方面以及您还没有机会看到的方法和有趣的用例。 例如线程。 实际线程。 或者更好的是Thread类本身。 当我们使用高可伸缩性系统时并发编程永远不会停止挑战但是现在我们将讨论一些不同的东西。 在这篇文章中您将看到线程支持的一些鲜为人知但有用的技术和方法。 无论您是初学者高级用户还是Java专业开发人员都请尝试查看其中哪些已为您所知以及哪些是新产品。 关于线程您还有其他值得一提的地方吗 我希望在下面的评论中听到它。 让我们开始吧。 初学者 1.线程名称 应用中的每个线程都有一个名称即构造该线程时为其生成的简单Java字符串。 默认名称值从“ Thread-0”到“ Thread-1”“ Thread-2”依此类推。 现在出现了更有趣的部分–线程公开了两种可用来设置其名称的方法 1.线程构造函数这是最简单的一个 class SuchThread extends Thread {Public void run() {System.out.println (Hi Mom! getName());}}SuchThread wow new SuchThread(much-name); 2.线程名称设置器 wow.setName(“Just another thread name”); 是的线程名是可变的。 因此除了在实例化实例名称时设置自定义名称外我们还可以在运行时进行更改。 名称字段本身设置为简单的String对象。 这意味着它最多可以包含2³¹-1个字符Integer.MAX_VALUE。 我说的绰绰有余。 请注意该名称不像唯一ID因此线程可以共享相同的名称。 另外不要尝试将null作为名称传递除非您希望引发异常不过“ null”是可以的我没有判断。 使用线程名称进行调试 因此现在您可以访问线程名称遵循自己的一些命名约定可以在发生问题时使您的生活变得更加轻松。 “ Thread-6”听起来有些无情我相信您可以想到一个更好的名字。 在处理用户请求时将其与自分配的事务ID结合在一起将其附加到线程的名称上您将大大减少错误解决时间。 保留在此处的一个好习惯是确保您在应用程序的每个线程的入口点生成一个UUID并在请求在节点进程和线程之间传递时保持一致。 让我们看一下这个示例某个线程池中的一个工作线程挂起了太长时间。 您运行jstack仔细查看然后看到以下内容 “pool-1-thread-1″ #17 prio5 os_prio31 tid0x00007f9d620c9800 nid0x6d03 in Object.wait() [0x000000013ebcc000] 好的“ pool-1-thread-1”为什么这么严重 让我们更好地了解您并想出一个更合适的名称 Thread.currentThread().setName(Context TID Params current Time, ...); 现在当我们再次运行jstack时情况看起来好多了 ”Queue Processing Thread, MessageID: AB5CAD, type: AnalyzeGraph, queue: ACTIVE_PROD, Transaction_ID: 5678956, Start Time: 30/12/2014 17:37″ #17 prio5 os_prio31 tid0x00007f9d620c9800 nid0x6d03 in Object.wait() [0x000000013ebcc000] 我们知道线程在阻塞时正在做什么并且还拥有启动所有线程的事务ID。 您可以追溯步骤重现错误隔离并解决它。 要了解更多有关使用jstack的酷方法的信息您可以在此处查看这篇文章。 2.线程优先级 优先级是另一个有趣的领域线程。 线程的优先级是介于1MIN_PRIORITY到10MAX_PRIORITY之间的值主线程的默认值为5NORM_PRIORITY。 每个新线程都获得其父级的优先级因此如果您不手动使用它则所有线程的优先级都可能设置为5。这也是Thread类的一个经常被忽略的字段我们可以对其进行访问和操作。通过方法getPriority和setPriority 。 无法在线程构造函数中进行设置。 谁仍然需要优先考虑 当然并非所有线程都是平等创建的有些线程需要您的CPU立即关注而其他线程只是后台任务。 优先级用于向OS线程调度程序发出信号。 在Takipi我们开发了一个错误跟踪和分析工具为用户处理新异常的线程将获得MAX_PRIORITY而处理诸如报告新部署等任务的线程将获得较低的优先级。 可能希望优先级较高的线程从与JVM一起使用的线程调度程序中获得更多时间。 好吧并非总是如此。 每个Java线程都会在OS级别上打开一个新的本机线程并且您设置的Java优先级会以不同的方式转换为每个平台的本机优先级。 在Linux上在运行应用程序时还必须包括“ -XX UseThreadPriorities”标志以便将它们考虑在内。 话虽如此线程优先级仍然只是您提供的建议。 与本机Linux优先级相比它们甚至没有涵盖整个值范围1..99以及线程范围的影响范围在-20..20之间。 主要要点是保持自己的逻辑以确保优先级在每个线程获得的CPU时间中得到反映的重要性但是不建议仅依靠优先级。 高级 3.线程本地存储 这与我们在这里谈论的其他生物有些不同。 ThreadLocal是一个从Thread类 java.lang.ThreadLocal 实现的概念但是为每个线程存储唯一的数据。 就像它上面说的那样它为您提供了线程本地存储这意味着您可以创建每个线程实例唯一的变量。 与您拥有线程名称或优先级的方式类似您可以创建自定义字段使其看起来像是Thread类的成员。 那不是很酷吗 但是我们不要太激动 前面有一些警告。 建议以以下两种方式之一创建ThreadLocal作为静态变量或单例的一部分在该局部不必是静态的。 请注意它位于全局范围内但在每个能够访问它的线程中局部执行。 这是一个ThreadLocal变量的示例该变量持有我们自己的数据结构以便于访问 public static class CriticalData {public int transactionId;public int username; }public static final ThreadLocalCriticalData globalData new ThreadLocalCriticalData(); 一旦有了ThreadLocal就可以使用globalData.set和globalData.get对其进行访问 。 全球 一定是邪恶的 不必要。 ThreadLocal变量可以保留事务ID。 当您有一个未捕获的异常使您的代码冒泡时这可以派上用场。 一个好的做法是设置一个UncaughtExceptionHandler 我们也可以通过Thread类获得它但必须自己实现。 一旦我们到达那个阶段关于实际上是什么使我们到达那里的提示就不多了。 我们剩下的是Thread对象当堆栈框架关闭时无法访问将我们带到那里的任何变量。 在我们的UncaughtExceptionHandler中随着线程的最后呼吸ThreadLocal几乎是我们剩下的仅有的东西之一。 我们可以本着以下精神做一些事情 System.err.println(Transaction ID globalData.get().transactionId); 就像这样我们为错误添加了一些有价值的上下文。 使用ThreadLocal的一种更富创意的方法是通过分配指定的内存块以供工作线程反复用作缓冲区。 当然这可能会很有用具体取决于您在内存的哪一侧与CPU开销之间的权衡。 也就是说要注意的是滥用我们的内存空间。 只要特定线程存在ThreadLocal就存在于特定线程中除非将其释放或线程死亡否则不会被垃圾回收。 因此在使用它时最好小心并保持简单。 4.用户线程和守护程序线程 回到我们的线程类。 我们应用中的每个线程都会收到“用户”或“守护程序”状态。 换句话说前景或后台线程。 默认情况下主线程是用户线程每个新线程都获得创建它的线程的状态。 因此如果将线程设置为守护程序则它创建的所有线程也将被标记为守护程序。 当您的应用程序中仅剩下正在运行的线程处于守护程序状态时该进程关闭。 要进行测试检查和更改线程状态我们有布尔值.setDaemontrue和.isDaemon方法。 什么时候设置守护进程线程 当线程对线程的结束不是很关键时应将其状态更改为守护进程以便进程可以关闭。 它消除了正确关闭线程立即停止所有操作并让它快速结束的麻烦。 另一方面当有一个线程运行的操作必须正确结束时否则将发生不良情况请确保将其设置为用户线程。 关键事务可以是例如数据库条目或完成不间断的更新。 专家 5. Java处理器亲和力 这部分使我们更接近代码与金属相遇的硬件。 处理器关联允许您将线程或进程绑定到特定的CPU内核。 这意味着无论何时执行该特定线程它都将专门在一个特定内核上运行。 通常情况下操作系统线程调度程序将根据其自己的逻辑担当此角色可能会考虑我们前面提到的线程优先级。 讨价还价的筹码是CPU缓存。 如果一个线程只在一个特定的内核上运行则很有可能会喜欢将所有数据准备好在缓存上。 当数据已经存在时无需重新加载它。 您节省的微秒数可以被更好地利用并且代码实际上将在该时间运行从而更好地利用分配的CPU时间。 尽管确实在操作系统级别进行了一些优化并且硬件体系结构当然也起着重要作用但是使用亲和力可以消除线程切换内核的机会。 由于这里有许多因素在起作用因此确定处理器亲和力将如何影响您的吞吐量的最好方法是接受测试的习惯。 尽管它可能并不总是会好得多但是您可能会遇到的好处之一就是吞吐量稳定。 亲和力策略可以降低到手术水平具体取决于获得的收益。 高频交易行业将是这类事情最重要的地方之一。 测试处理器亲和力 Java没有对处理器相似性的本机支持但这当然还没有结束。 在Linux上我们可以使用tasket命令设置进程亲和力。 假设我们有一个Java进程正在运行我们想将其固定到特定的CPU taskset -c 1 “java AboutToBePinned” 或者如果它已经在运行 taskset -c 1 PID 现在要进入线程级别我们需要插入一些新代码。 幸运的是有一个开源库可以帮助我们做到这一点 Java-Thread-Affinity 。 由OpenHFT的Peter Lawrey撰写这可能是最简单的方法。 让我们看一个固定线程的简单示例更多信息可以在该库的GitHub存储库中找到 AffinityLock al AffinityLock.acquireLock(); 就是这样。 GitHub上提供了用于获取锁的更高级选项其中考虑了选择特定内核的不同策略。 结论 我们已经看到了5种查看线程的方法线程名称线程本地存储优先级守护程序线程和相似性。 希望这有助于您每天处理新事物并很高兴听到您的评论 还有哪些其他线程处理方法可以适用 翻译自: https://www.javacodegeeks.com/2015/01/thread-magic-tricks-5-things-you-never-knew-you-can-do-with-java-threads.html
http://www.pierceye.com/news/950930/

相关文章:

  • 网站后台 不能删除文章贵州建设厅网站首页
  • 重庆市园林建设有限公司网站酒店平台网站建设
  • c 网站开发实例教程超级外链工具 增加外链中
  • ip怎么做网站外贸网站建设哪里好
  • 市网站建设网站排名查询alexa
  • 西安建设网站首页网络互联网推广
  • 百度搜索网站显示图片wordpress 工作室
  • 网站页面模板 建设中集团做网站优势
  • 提供佛山网站制作大连市建设工程集团有限公司
  • 北京网站设计外包公司价格网站怎么备案在哪里
  • 视频网站广告代码网站建设怎么插图片
  • 网站建设需要敲代码吗外贸网站商城
  • wordpress增加网站网页关键词企业网站的需求是什么
  • 口碑好网站建设电话什么是搜索引擎优化用一句话概括
  • wordpress的vps建站流程ui是什么意思
  • 广州专业的网站建设公司哪家好wordpress博客优秀
  • 没有服务器建网站免费开发软件制作平台
  • 高端品牌网站建设明细报价报青岛市公共资源交易网
  • 余姚 网站建设济南网站开发薪酬
  • 一流高职院校建设工作网站野花香社区在线观看播放
  • 大连建设科技网站绿色主题 wordpress
  • 外网访问不了内网建设的网站做网站电销
  • 桂平市住房和城乡建设局网站杭州app定制公司
  • 免费做金融网站自己做网站想更换网址
  • 浙江省网站建设公司成都五月花网页设计培训
  • 江苏外贸网站建设网站开发工作流审批流
  • 自媒体论坛交流推荐网站外部优化
  • 南宁网络建站直接用源码做网站盗版吗
  • 哪些网站可以做驾考试题旅游网站排名排行榜
  • 网站宣传专利被罚账户竞价托管费用