Multithreading in Java

Information about Multithreading in Java

Published on September 26, 2011

Author: 721982



Multithreading and Timers in Java: Multithreading and Timers in Java What is a Thread?: What is a Thread? Think ‘thread of execution’ or ‘thread of control flow’. Java allows a program to have multiple threads running concurrently. What does this mean to us as developers? Single-Threaded Development: Single-Threaded Development Many programs written for class so far have been single-threaded. When you call a method, it only returns once its task is complete. Thread ‘Stalling’: Thread ‘Stalling’ What happens when a method needs to wait for something before returning, such as user input or a network connection? (Recall accept() from last lecture) How can we handle other tasks while waiting to accept a new network connection? Multithreading: Multithreading Answer: Accept connections in a different thread. Java allows us to create new threads for handling concurrent tasks. How?: How? Java provides two ways to create a new thread. Extend the Thread class ( java.lang.Thread ) Implement the Runnable interface ( java.lang. Runnable ) Java’s Thread Class: Java’s Thread Class When creating a new thread by extending the Thread class, you should override the run() method. public class FooThread extends Thread { public FooThread() { // Initialize parameters } public void run() { // do something } } Now What?: Now What? To start a new thread, use the inherited method start() FooThread ft = new FooThread(); ft.start(); What happens in start()?: What happens in start() ? start() is responsible for two things: Instructing the JVM to create a new thread Call your Thread object’s run() method in the new thread You might think of run() as being similar to main() More about More about Like main(), run() defines a starting point for the JVM. What happens when the run() method exits? The thread ‘ends’. Another method - Runnable: Another method - Runnable A thread can also be created by implementing the Runnable interface instead of extending the Thread class. public class FooRunnable implements Runnable { public FooRunnable() { } public void run() { // do something } } Starting a Runnable: Starting a Runnable Pass an object that implements Runnable to the constructor of a Thread object, then start the thread as before. FooRunnable fr = new FooRunnable(); new Thread(fr).start() Multithreading Pros and Cons: Multithreading Pros and Cons Pro: Multiple threads run concurrently on the system Multiple tasks can be handled at once. Processing can be done in the background so as not to interrupt the user. Con: Multiple threads run concurrently on the system No more guarantees as to what has already happened, what objects have been initialized yet, etc. Code now has to be ‘thread-safe’ or ‘synchronized’ Debugging becomes much harder. Tips for Writing Thread-safe Code: Tips for Writing Thread-safe Code Limit a thread’s access to common variables Track changes to instance variables through get/set methods When two or more threads are accessing a collection, make sure the collection being used is synchronized (i.e. using Vector instead of ArrayList) How do I stop it??: How do I stop it?? Methods used to directly stop or suspend threads have been depreciated in the Java API, as they could cause synchronization issues. The thread’s run() method must return for the thread to stop. Interesting Facts: Interesting Facts In many of your Swing programs, main() has consisted of creating a new JFrame object and calling show() on it show() actually starts a new thread that the GUI runs in and returns immediately – main() then returns. Why doesn’t your program end when main() does? Java applications only exit when all of their threads have stopped. Would you like to know more?: Would you like to know more? Refer to the Java API at A Simpler Way: A Simpler Way Multithreading can add a lot of complexity to a program. Sometimes you simply want some simple event to happen in the background at a given interval. Timers: Timers A Timer will internally launch a new thread, but handle most of the work for you. A Timer will call a method when its interval expires. Timer Guidelines: Timer Guidelines Timers should be performing quick tasks, such as updating simple state. If a timer is performing a complex operation, its next interval may expire before it finishes, and the timer will become backlogged (bad) Common Uses for Timers: Common Uses for Timers Timed events or scheduled updates Delay events for a specified time Animation Creating Timers: Creating Timers Java has two Timer classes – one located in java.util and one in javax.swing . We’ll be dealing with the one in the Swing library. Important timer methods: public Timer(int ms_delay, ActionListener al) public void start() public void stop() Wait, an ActionListener?: Wait, an ActionListener ? Timers take a delay (in milliseconds) and an ActionListener object in their constructor. Once a timer has started, it will call the ActionListener ’s ActionPerformed() method each time its interval expires. Timer Advantages Over Threads: Timer Advantages Over Threads Simplicity! The familiar ActionListener interface and internal handling of the thread bookkeeping makes timers much easier to use and maintain than full threads. What you gain in simplicity, you give up in flexibility. For more information…: For more information… See the Java API:

Related presentations