13/04/2015Client-server Programming1 Block 6: Threads 1 Jin Sa.

Slides:



Advertisements
Similar presentations
1 Multithreaded Programming in Java. 2 Agenda Introduction Thread Applications Defining Threads Java Threads and States Examples.
Advertisements

Practical Session 6 Multitasking vs. multithreading Threads Concurrency vs. Parallelism Java Threads Thread confinement Object/Class Immutability.
Multiplexing/Demux. CPSC Transport Layer 3-2 Multiplexing/demultiplexing application transport network link physical P1 application transport network.
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. Multithreading Example from Liang textbook.
Multithreaded Programs in Java. Tasks and Threads A task is an abstraction of a series of steps – Might be done in a separate thread – Java libraries.
Unit 141 Threads What is a Thread? Multithreading Creating Threads – Subclassing java.lang.Thread Example 1 Creating Threads – Implementing java.lang.Runnable.
Algorithm Programming Concurrent Programming in Java Bar-Ilan University תשס"ח Moshe Fresko.
Intro to Threading CS221 – 4/20/09. What we’ll cover today Finish the DOTS program Introduction to threads and multi-threading.
Threads Load new page Page is loading Browser still responds to user (can read pages in other tabs)
Java Threads Part II. Lecture Objectives To understand the concepts of multithreading in Java To be able to develop simple multithreaded applications.
Multithreading Why multi-threads Defining and creating threads An example with two threads Life cycle of a thread An example with user interface Problem.
Slides prepared by Rose Williams, Binghamton University Chapter 20 Java Threads Part II.
Multithreading A thread is the flow of execution, from beginning to end, of a task in a program. With Java, you can launch multiple threads from a program.
Based on Silberschatz, Galvin and Gagne  2009 Threads Definition and motivation Multithreading Models Threading Issues Examples.
Multithreaded Java COMP1681 / SE15 Introduction to Programming Fast Track Session 3.
Block 3: Threads Jin Sa. Outline of block 3 Why multi-threads Defining and creating threads An example with two threads Life cycle of a thread An example.
Cosc 4755 Phone programming: GUI Concepts & Threads.
Java ThreadsGraphics Programming Graphics Programming: Java Threads.
Multithreading.
Threading in Java – a Tutorial QMUL IEEE SB. Why Threading When we need to run two tasks concurrently So multiple parts (>=2) of a program can run simultaneously.
Java: Animation Chris North cs3724: HCI. Animation? Changing graphics over time Examples: cartoons Clippy, agents/assistants Hour glass Save dohicky Progress.
Threads some important concepts Simon Lynch
1 Java Threads Instructor: Mainak Chaudhuri
MultiThreaded Applications. What is Multithreaded Programming? Having your software appear to perform multiple tasks in parallel –Individual paths of.
Rensselaer Polytechnic Institute CSCI-4210 – Operating Systems David Goldschmidt, Ph.D.
Multi-Threaded Application CSNB534 Asma Shakil. Overview Software applications employ a strategy called multi- threaded programming to split tasks into.
REVIEW On Friday we explored Client-Server Applications with Sockets. Servers must create a ServerSocket object on a specific Port #. They then can wait.
10/17/2015Vimal1 Threads By 10/17/2015Vimal2 Why use threads?? It is a powerful programming tool Computer users take it for granted.
© 2004, D. J. Foreman 2-1 Concurrency, Processes and Threads.
Computer Engineering Rabie A. Ramadan Lecture 8. Agenda 2 Introduction Thread Applications Defining Threads Java Threads and States Priorities Accessing.
Threads in Java. Processes and Threads Processes –A process has a self-contained execution environment. –Has complete set of runtime resources including.
1 Web Based Programming Section 8 James King 12 August 2003.
A Guide to Advanced Java Faculty:Nguyen Ngoc Tu. Concurrent programming in Java How to make all things run-able?
Concurrent Programming and Threads Threads Blocking a User Interface.
C20: Threads see also: ThreadedBallWorld, DropTest, Tetris source examples Not covered: advanced stuff like notify/notifyAll.
Multithreading in Java Sameer Singh Chauhan Lecturer, I. T. Dept., SVIT, Vasad.
OPERATING SYSTEMS Frans Sanen.  Recap of threads in Java  Learn to think about synchronization problems in Java  Solve synchronization problems in.
Introduction to Threads Session 01 Java Simplified / Session 14 / 2 of 28 Objectives Define a thread Define multithreading List benefits of multithreading.
15.1 Threads and Multi- threading Understanding threads and multi-threading In general, modern computers perform one task at a time It is often.
1 CSCD 330 Network Programming Some Material in these slides from J.F Kurose and K.W. Ross All material copyright Lecture 9 Client-Server Programming.
Concurrent Computing CSCI 201L Jeffrey Miller, Ph.D. HTTP :// WWW - SCF. USC. EDU /~ CSCI 201 USC CSCI 201L.
© Wang Bin 2004 Java Threads. © Wang Bin 2004 In this lesson, you will learn to: u Define the concepts of threads and multithreading  Identify the functions.
Multi-Threading in Java
Multithreading & Synchronized Algoritma Pemrograman 3 Sistem Komputer – S1 Universitas Gunadarma 1.
Chapter 13: Multithreading The Thread class The Thread class The Runnable Interface The Runnable Interface Thread States Thread States Thread Priority.
CSC CSC 143 Threads. CSC Introducing Threads  A thread is a flow of control within a program  A piece of code that runs on its own. The.
Concurrency in Java MD. ANISUR RAHMAN. slide 2 Concurrency  Multiprogramming  Single processor runs several programs at the same time  Each program.
Java Thread Programming
Multithreading Lec 23.
PA1 Discussion.
Chapter 2 Processes and Threads Today 2.1 Processes 2.2 Threads
Chapter 4: Multithreaded Programming
Object-Orientated Analysis, Design and Programming
Multithreaded Programming in Java
Distributed Systems - Comp 655
Chapter 4: Threads.
Multithreading.
Multithreaded Programming
Concurrency, Processes and Threads
Java Thread.
Multithreading in java.
NETWORK PROGRAMMING CNET 441
Representation and Management of Data on the Internet
Gentle Introduction to Threads
Concurrency, Processes and Threads
Multiplexing/Demux.
Lecture 19 Threads CSE /6/2019.
CMSC 202 Threads.
Java Chapter 3 (Estifanos Tilahun Mihret--Tech with Estif)
Threads and concurrency / Safety
Presentation transcript:

13/04/2015Client-server Programming1 Block 6: Threads 1 Jin Sa

13/04/2015Client-server Programming2 Outline of block 6 Why multi-threads and typical applications Defining and creating threads An example with two threads Life cycle of a thread An example with user interface Problem with threads Synchronisation among threads

13/04/2015Client-server Programming3 Why multithreading? Most of the java programs you have seen so far can only do one thing at a time. In the real world many actions are happening concurrently. Typical applications: –User interfacing, e.g. One deals with the drawing, the other deals with user interface –Many instances of similar behaviour, e.g. a concurrent server serves many clients –Many different tasks, e.g. open day simulation

13/04/2015Client-server Programming4 Two ways to define threads in Java Extending the Thread class Implementing the Runnable interface

13/04/2015Client-server Programming5 Creating threads by extending the Thread class Define a class, e.g. NewThread, extending the Thread class Override the run() method to tell the system how the thread will be executed when it runs. Create an instance of NewThread, Invoke the start() method to tell the system to start the thread and to execute the run() method.

13/04/2015Client-server Programming6 Key elements for extending Thread 1 class NewThread extends Thread { … //override the run method public void run() { //define how the thread runs … } … }

13/04/2015Client-server Programming7 Key element for extending Thread 2 class MyApplication { … public void someMethod() { NewThread mythread=new NewThread(); … mythread.start(); } … }

13/04/2015Client-server Programming8 An example: a thread printing its id repeatedly class MyThread extends Thread { private String threadID; MyThread(String s) { threadID=s; } public void run() { for (int i=0;i<200;i++){ System.out.println("Print thread " + threadID); }//for }//run } //MyThread

13/04/2015Client-server Programming9 An example: two threads printing their ids public class SeveralThreads { public static void main(String [] args) { MyThread t1,t2; //create threads t1 = new MyThread("t1"); t2 = new MyThread("t2"); //start threads t1.start(); t2.start(); }//main }//SeveralThreads

13/04/2015Client-server Programming10 An example: two threads printing their ids Print thread t1 Print thread t2 Print thread t1 Print thread t2 Print thread t1 Print thread t2 Print thread t1 Print thread t2 … Run the Severalthread program in E:\Teaching\Client_server\Run2006-7\Code\ClientServer. Package threads

13/04/2015Client-server Programming11 Life cycle of a thread A thread can be in one of these states once it is created: ready, running, blocked, finish A ready thread is runnable, but not running, it needs allocation of CPU time. Common ways for a running thread to become blocked include: waiting for I/O, sleep A common way for a thread to finish is when it completes its execution of the run() method

13/04/2015Client-server Programming12 Creating threads by implementing the Runnable interface Define a class, e.g. NewTask, implementing the Runnable interface implement the run() method to tell the system how the task will be executed when it runs. Create an instance of NewTask, e.g. t1 The task needs to be executed in a thread. Create an instance of Thread with t1 as the parameter Invoke the start() method of the thread to tell the system to start the thread.

13/04/2015Client-server Programming13 Key elements for implementing Runnable 1 class NewTask extends AnotherClass implements Runnable { … //implement the run method public void run() { //define how the thread runs … } … }

13/04/2015Client-server Programming14 Key elements for implementing Runnable 2 class MyApplication { … public void someMethod() { NewTask mytask=new NewTask(); Thread mythread=new Thread(mytask); … mythread.start(); } … }

13/04/2015Client-server Programming15 Implementing Runnable or Extending Thread Use Runnable if need to extend another class Even if NewTask does not extend another class, this is the preferred method for creating a thread if we only want to define the run() method, and not using the other methods in Thread.

13/04/2015Client-server Programming16 An example: thread printing its id using implementing Runnable class MyTask implements Runnable { private String threadID; MyTask(String s) { threadID=s; } public void run() { for (int i=0;i<200;i++){ System.out.println("Print thread " + threadID); }//for }//run } //MyTask

13/04/2015Client-server Programming17 An example: two threads printing their ids using implementing Runnable public class SeveralThreads { public static void main(String[] args) { //create instances of MyTask MyTask t1 = new MyTask("t1"); MyTask t2 = new MyTask("t2"); // create Thread instances Thread tt1=new Thread(t1); Thread tt2=new Thread(t2); //start threads tt1.start(); tt2.start(); }//main }//SeveralThreads

Thread synchronisation

Problem with accessing shared resources– an example The Account class is a bank account, contains methods such as deposit and withdraw. Cardholder is a thread allows the card holder to deposit £10 repeatedly for 10 times. FamilyAccount has a main methods that creates one instance of an Account, two instances of Cardholders, both putting money into the same account.

Balance=50 An instance of Account c1c2 deposit(10)

Problem with accessing shared resources– an example 1 class Account { private int balance=0; public void deposit(int amount) { //balance=balance+amount; int tmp = balance; Thread.sleep(200); balance = tmp + amount; System.out.println("Current balance is "+balance); }

Problem with accessing shared resources– an example 2 class CardHolder extends Thread{ private Account acc; private String accName; CardHolder(Account a,String nm) { acc=a; accName=nm; } public void run() { for (int i=0;i<10;i++) { System.out.println(accName+" is depositing £ 10..."); acc.deposit(10); } }//run }//CardHolder

Problem with accessing shared resources– an example 3 class FamilyAccount { public static void main(String [] args) { Account ourAccount=new Account(); CardHolder c1 = new CardHolder(ourAccount,"john"); CardHolder c2 = new CardHolder(ourAccount,"Kate"); c1.start(); c2.start(); } }//FamilyAccount

Problem with accessing shared resources– an example 4 Run FamilyAccount in the E:clientserver/threads (account,cardholder,familyAccount) The result should be: The balance is : £10 The balance is : £20 The balance is : £30 … The balance is : £200 But a shared resource may be corrupted if it is accessed simultaneously by multiple threads

Problem For example, the current balance in ourAccount is £50, The c1 thread: tries to deposit £10; loading the current value, i.e. 50, to the temporary storage place before doing the arithmetic. The thread is suspended; switches to the c2 thread. The c2 thread: tries to deposit £10; loading the current balance, which is still £50. The thread is then suspended; resumes the c1 thread, Back with the c1 thread: add £10 to the value, i.e. £50, in the temporary storage; £60 is stored in the attribute balance; suspend the c1 thread Back with the c2 thread: the c2 thread adds £10 to the current value in the temporary storage that is 50. The result 60 is now stored in the balance attribute. Should be 70, not 60!

Race condition The problem is that the two threads (c1 and c2) are accessing the same resource (account) in a way that causes a conflict. This is a common problem, known as a race condition, in multithreaded programs. A class is said to be thread-safe if an object of the class does not cause a race condition in the presence of multiple threads. The Account class is not thread-safe at the moment.

Synchronized method There is a need to protect the shared data. Use synchronized methods so that there can be only one thread executing this method at a time. Java guarantees once a thread has gained access to a synchronized method, it will finish the method before any other thread gains access to that or any other synchronized method in that object. A synchronised method (implicitly) acquires a lock on the instance.

Deposit as a Synchronized method class Account { int balance=0; public synchronized void deposit(int amount) { int tmp = balance; Thread.sleep(200); balance = tmp + amount; System.out.println("Current balance is "+balance); } }//Account Run the program familyAccount, change the first line of deposit

13/04/2015Client-server Programming29 Multithreading for user interface in GUI applications

13/04/2015Client-server Programming30 Example: Flashing label Press start, program displays a flashing rectangle until user presses the stop button. One thread is tied to display the flashing rectangle. In order to be able to accept user’s input, need more than one thread. Run the FlashStop program. (E:\Teaching\Client_server\Run \Code\ClientServer\src\threads)

13/04/2015Client-server Programming31 Implementations Two classes: FlashStop and FlashRec FlashStop deals with the graphical interface and the interaction with the user –Presents gui elements (behaves as a Frame) –Implements the actonPerformed method (behaves as an ActionListener) To start a thread for displaying the “flashing” To stop the thread FlasRec deals with displaying the “flashing” effect. –A thread repeatedly sets the background colour to be red/white

13/04/2015Client-server Programming32 Flash rectangle 1 class FlashRec extends JPanel implements Runnable{ private boolean keepgoing=false; public void run() { while (keepgoing) { try { setBackground(Color.red); Thread.sleep(800); setBackground(Color.white); Thread.sleep(800); } catch (Exception e) {…} }//while }//run To continue…

13/04/2015Client-server Programming33 Flash rectangle 2 public void pleaseStop() { keepgoing=false; } public void pleaseStart(){ keepgoing=true; } }//FlashRec

13/04/2015Client-server Programming34 FlashStop class 1 public class FlashStop extends JFrame implements ActionListener { private JButton flash= new JButton(“flash"); private JButton stop=new JButton("stop"); private FlashRec fr; private Thread recThread; …

13/04/2015Client-server Programming35 FlashStop class 2 FlashStop() { setSize(400,200); fr=new FlashRec(); Container c = getContentPane(); c.add(flash, "North"); start.addActionListener(this); c.add(stop,"South"); stop.addActionListener(this); c.add(fr, "Center");// }//FlashStop

13/04/2015Client-server Programming36 FlashStop class 3 public void actionPerformed(ActionEvent e) { if (e.getSource() == start ) { fr.pleaseStart(); recThread=new Thread(fr); recThread.start();} if (e.getSource() ==stop) { fr.pleaseStop();} }//actionPerformed The actual code is slightly more complex.

13/04/2015Client-server Programming37 Review Understand how to define and create threads in Java: extends Thread and implement Runnable Be able to write simple Java thread applications Problem and solution with concurrent thread Understand the GUI example and how to deal with events.