multithreading interview questions
Top multithreading frequently asked interview questions
What is the difference between using the Runnable and Callable interfaces when designing a concurrent thread in Java, why would you choose one over the other?
Source: (StackOverflow)
Can someone please show me an example of something that can be done with an IntentService
that cannot be done with a Service
(and vice-versa)?
I also believe that an IntentService
runs in a different thread and a Service
does not. So, as far as I can see, starting a service within its own thread is like starting an IntentService
. Is it not?
I would appreciate if someone can help me with both of my questions.
Source: (StackOverflow)
From what time I've spent with threads in Java, I've found these two ways to write threads:
With implements Runnable
:
public class MyRunnable implements Runnable {
public void run() {
//Code
}
}
//Started with a "new Thread(new MyRunnable()).start()" call
Or, with extends Thread
:
public class MyThread extends Thread {
public MyThread() {
super("MyThread");
}
public void run() {
//Code
}
}
//Started with a "new MyThread().start()" call
Is there any significant difference in these two blocks of code ?
Source: (StackOverflow)
Suppose, I have a webserver which holds numerous Servlets
. For information passing among those Servlets
I am getting the Servlets
context and setting session variables.
Now, if 2 or more users send request to this server then what happens to the session variables? Will they all be common for all the users or they will be different for each user. If they are different, then how was the server able to differentiate between different users?
One more similar question, if there are *n*
users accessing a particular Servlets
, then this Servlets
gets instantiated only the first time the first user accessed it or does it get instantiated for all the users separately?
Source: (StackOverflow)
I have a scenario. (Windows Forms, C#, .NET)
- There is a main form which hosts some user control.
- The user control does some heavy data operation, such that if I directly call the
UserControl_Load
method the UI become nonresponsive for the duration for load method execution.
- To overcome this I load data on different thread (trying to change existing code as little as I can)
- I used a background worker thread which will be loading the data and when done will notify the application that it has done its work.
- Now came a real problem. All the UI (main form and its child usercontrols) was created on the primary main thread. In the LOAD method of the usercontrol I'm fetching data based on the values of some control (like textbox) on userControl.
The pseudocode would look like this:
CODE 1
UserContrl1_LoadDataMethod()
{
if (textbox1.text == "MyName") // This gives exception
{
//Load data corresponding to "MyName".
//Populate a globale variable List<string> which will be binded to grid at some later stage.
}
}
The Exception it gave was
Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on.
To know more about this I did some googling and a suggestion came up like using the following code
CODE 2
UserContrl1_LoadDataMethod()
{
if (InvokeRequired) // Line #1
{
this.Invoke(new MethodInvoker(UserContrl1_LoadDataMethod));
return;
}
if (textbox1.text == "MyName") // Now it wont give an exception
{
//Load data correspondin to "MyName"
//Populate a globale variable List<string> which will be binded to grid at some later stage
}
}
BUT BUT BUT... it seems I'm back to square one. The Application again
become nonresponsive. It seems to be due to the execution of line #1 if condition. The loading task is again done by the parent thread and not the third that I spawned.
I don't know whether I perceived this right or wrong. I'm new to threading.
How do I resolve this and also what is the effect of execution of Line#1 if block?
The situation is this: I want to load data into a global variable based on the value of a control. I don't want to change the value of a control from the child thread. I'm not going to do it ever from a child thread.
So only accessing the value so that the corresponding data can be fetched from the database.
Source: (StackOverflow)
I saw different binaries for PHP, like non thread or thread safe? What does this mean? What is the difference between these packages?
Source: (StackOverflow)
I have some questions regarding the usage and significance of the synchronized
keyword.
- What is the significance of the
synchronized
keyword?
- When should methods be
synchronized
?
- What does it mean programmatically and logically?
Source: (StackOverflow)
Just wondering what the difference between BeginInvoke()
and Invoke()
are?
Mainly what each one would be used for.
EDIT: What is the difference between creating a threading object and calling invoke on that and just calling BeginInvoke()
on a delegate? or are they the same thing?
Source: (StackOverflow)
Let's say that a class has a public int counter
field that is accessed by multiple threads. This int
is only incremented or decremented.
To increment this field, which approach should be used, and why?
lock(this.locker) this.counter++;
,
Interlocked.Increment(ref this.counter);
,
- Change the access modifier of
counter
to public volatile
.
Now that I've discovered volatile
, I've been removing many lock
statements and the use of Interlocked
. But is there a reason not to do this?
Source: (StackOverflow)
A mutex is a programming concept that is frequently used to solve multi-threading problems. My question to the community:
What is a mutex and how do you use it?
Source: (StackOverflow)
I am trying to understand the advantages of multiprocessing over threading. I know that multiprocessing gets around the Global Interpreter Lock, but what other advantages are there, and can threading not do the same thing?
Source: (StackOverflow)
What is the difference between a wait()
and sleep()
in Threads?
Is my understanding that a wait()
-ing Thread is still in running mode and uses CPU cycles but a sleep()
-ing does not consume any CPU cycles correct?
Why do we have both wait()
and sleep()
: how does their implementation vary at a lower level?
Source: (StackOverflow)
What is the simplest way to update a Label
from another thread?
I have a Form
on thread1
, from that I'm starting another thread (thread2
). While thread2
is processing some files I would like to update a Label
on the Form
with the current status of thread2
's work.
How can I do that?
Source: (StackOverflow)
I know about the "cooperative" threading of ruby using green threads. How can I create real "OS-level" threads in my application in order to make use of multiple cpu cores for processing?
Source: (StackOverflow)