DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Latest Articles - DZone

article thumbnail
Learn Drools (Part 5): Truth Maintenance
Drools handles truth tables via its Truth Maintenance System. As Drools facts change, the system logically inserts the new data, automatically keeping it updated.
December 9, 2016
by Shaamik Mitraa
· 12,342 Views · 4 Likes
article thumbnail
Duplication Vs. Redundancy in Code
''Redundancy'' may be a better word choice than ''duplication'' when talking about code quality. Why does it matter?
December 8, 2016
by David Bernstein
· 18,035 Views · 2 Likes
article thumbnail
Make Your Own LIDAR Sensor
If you want to measure distances, time-of-flight might be the way to go. To do that, consider Light Detection and Ranging (LIDAR). This step-by-step tutorial will help.
December 8, 2016
by Erich Styger
· 42,892 Views · 2 Likes
article thumbnail
ConcurrentHashMap isn't always enough
When Java developers come to a task of writing a a new class which should have a Map datastructure field, accessed simultaneously by several threads, they usually try to solve the synchronization issues invloved in such a scenario by simply making the map an instance of ConcurrentHashMap . public class Foo { private Map theMap = new ConcurrentHashMap<>(); // the rest of the class goes here... } In many cases it works fine just because the contract of ConcurrentHashMap takes care of the potential synchronization issues related to reading/writing to the map. But there are cases where it's not enough, and a developer gets race conditions which are hard to predict, and even harder to find/debug and fix. Let's have a look, at the next example: public class Foo { private Map theMap = new ConcurrentHashMap<>(); public Object getOrCreate(String key) { Object value = theMap.get(key); if (value == null) { value = new Object(); theMap.put(key, value); } return value; } } Here we have a "simple" getter ( getOrCreate(String key) ), which gets a key and returns the value assosiated with the given key in theMap . If there is no mapping for the key, the method creates a new value, inserts it into theMap and returns it. So far so good. But what happens when 2 (or more) threads call the getter with the same key when there is no mapping for the key in theMap? In such a case we might receive a race condition: Suppose thread t1 enters the function and comes to line 7. Its value is null . At this point thread t2 enters the function and also comes to line 7. Its value is also obviously null . Therefore from this point the two threads will enter the if statement and execute lines 8 and 9, thus creating two different new Objects. Upon returning from the getter each thread will get a different Object instance, violating programmer's wrong assumption that by using ConcurrentHashMap "everything is synchronized" and therefore two different threads should get the same value for the same key. To solve this issue we can synchronize the entire method, thus making it atomic: public class Foo { private Map theMap = new ConcurrentHashMap<>(); public synchronized Object getOrCreate(String key) { Object value = theMap.get(key); if (value == null) { value = new Object(); theMap.put(key, value); } return value; } } But this is a bit ugly, and uses Foo instace's monitor, which may affect performance if there are other methods in this class which are synchronized. Also a common rule of thumb is to try to eliminate using synchronized methods as much as possible. A much better approach should be using Java 8 Map's computeIfAbsent(K key, Function mappingFunction), which, in ConcurrentHashMap's implementation runs atomically: public class Foo { private Map theMap = new ConcurrentHashMap<>(); public Object getOrCreate(String key) { return theMap.computeIfAbsent(key, k -> new Object()); } } The atomicity of computeIfAbsent(..) assures that only one new Object will be created and put into theMap, and it'll be the exact same instance of Object that will be returned to all threads calling the getOrCreate function. Here, not only the code is correct, it's also cleaner and much shorter. The point of this example was to introduce a common pitfall of blindly relying on ConcurrentHashMap as a majical synchronzed datastructure which is threadsafe and therefore should solve all our concurrency issues regarding multiple threads working on a shared Map. ConcurrentHashMap is, indeed, threadsafe. But it only means that all read/write operations on such map are internally synchronized. And sometimes it's just not enough for our concurrent environment needs, and we have to use some special treatment which will guarantee atomic execution. A good practice will be to use one of the atomic methods implemented by ConcurrentHashMap, i.e: computeIfAbsent(..), putIfAbsent(..), etc.
December 8, 2016
by Dima Leah
· 48,898 Views · 12 Likes
article thumbnail
Excel Hacks To Ignore Missing Data
Is missing data an obstacle for you? Here are some workarounds in Excel so you can move past it.
December 8, 2016
by B Jones
· 7,988 Views · 3 Likes
article thumbnail
Message-Based Security for SOAP in webMethods: Part I
Learn how to place policies under Integration Server, attach a policy to web service descriptor, and pass message-based authentication credentials with web service.
December 8, 2016
by Prasad Pokala
· 8,186 Views · 7 Likes
article thumbnail
Real-Time Data Batching With Apache Camel
If you want your message flow to scale, it takes some work. This proposal, using Apache Camel, let's you handle high volume requests with a variety of databases.
December 8, 2016
by Ben O'Day
· 21,952 Views · 9 Likes
article thumbnail
Using Web Components in Plain Java
See how you can use Vaadin, as well as a few other tools, to incorporate web components in your Java projects.
December 8, 2016
by Alejandro Duarte DZone Core CORE
· 11,676 Views · 9 Likes
article thumbnail
Creating Maps With Named Lambdas
Learn how you can create a Java Map like this: map = mapOf(one -> 1, two -> 2) using a trick to get the lambda parameter name.
December 7, 2016
by Per-Åke Minborg
· 23,569 Views · 49 Likes
article thumbnail
Antipattern of the Month: Cherry Picking
The best DevOps teams exhibit a high level of cross-skilling, and cherry-picking often occurs in teams in which the members are not cross-trained. Read on to learn more.
December 7, 2016
by $$anonymous$$
· 10,163 Views · 4 Likes
article thumbnail
How to Compose an Infinispan Docker Image
Read on to explore how to create multicontainer Docker applications involving Infinispan with the help of Docker Compose.
December 7, 2016
by Manik Surtani
· 7,377 Views · 3 Likes
article thumbnail
Top 5 Factors That Impact Your Software Performance
Knowing where your software is failing is essential to identifying the bottleneck. These five performance-impacting factors give you a good place to start.
December 7, 2016
by Thamwika Bergstrom
· 6,980 Views · 3 Likes
article thumbnail
How to Use Compare and Merge for SwaggerHub
Read on to find out how to keep API documentation shipping moving forward smoothly by using Compare and Merge for SwaggerHub.
December 7, 2016
by Keshav Vasudevan
· 8,137 Views · 4 Likes
article thumbnail
An Introduction to JBehave and BDD
Want to avoid a glassy-eyed stare you get when trying to explain your code to stakeholders? Check out how JBehave and behavior-driven development can help.
December 7, 2016
by Arun Pandey DZone Core CORE
· 56,111 Views · 14 Likes
article thumbnail
Installing RavenDB 4.0 on Your Raspberry Pi 3
Here's a quick guide to get the NoSQL database RavenDB up and running on your Raspberry Pi — a possible data solution for your IoT projects.
December 7, 2016
by Oren Eini
· 7,131 Views · 2 Likes
article thumbnail
Apache Ignite With JPA: A Missing Element
Learn how to persist your entities with Apache Ignite and JPA. This tutorial will guide you through the setup of execution of that handy ability.
December 7, 2016
by Shamim Bhuiyan
· 15,322 Views · 14 Likes
article thumbnail
Anomaly Detection Using H2O Deep Learning
In this article, we jump straight into creating an anomaly detection model using Deep Learning and anomaly package from H2O.
December 6, 2016
by Sibanjan Das
· 25,820 Views · 7 Likes
article thumbnail
IntelliJ IDEA Inspection Settings for Java 8 Refactoring
Follow along as Trisha Gee explains how you can use IntelliJ IDEA to refactor your code for use in Java 8, covering loops, streams, and more.
December 6, 2016
by Trisha Gee
· 23,099 Views · 6 Likes
article thumbnail
An Overview of Printed Circuit Boards
See how PCBs have developed and how they're used in modern technology. Also check out how they've developed in recent years and what they're looking to do in the future.
December 6, 2016
by Deborah Belford
· 28,735 Views · 3 Likes
article thumbnail
5 Signs That Your REST API Isn't RESTful
The author provides five criteria to help you make the distinction between an API that is RESTful based on the original meaning versus the colloquial meaning of REST.
December 6, 2016
by Robert Brautigam
· 37,847 Views · 43 Likes
  • Previous
  • ...
  • 1367
  • 1368
  • 1369
  • 1370
  • 1371
  • 1372
  • 1373
  • 1374
  • 1375
  • 1376
  • ...
  • Next
  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook
×