java-development-for-beginners-learnit / 27 - Multithreading /002 First Multithreading Program Thread & Runnable_en.srt
Tan115's picture
Add files using upload-large-folder tool
1b558aa verified
Raw
History Blame Contribute Delete
35.7 kB
1
00:00:05,000 --> 00:00:06,000
Hello.
2
00:00:06,000 --> 00:00:09,000
Yes, students in this class and will create our first multithreaded program.
3
00:00:10,000 --> 00:00:14,000
It is time to put our theoretical knowledge on practice and learn new things.
4
00:00:14,000 --> 00:00:20,000
We'll start from understanding of threat lifecycle and in which states our threat may be and when will
5
00:00:20,000 --> 00:00:22,000
jump to practical examples.
6
00:00:22,000 --> 00:00:24,000
You'll have enough knowledge to understand that.
7
00:00:25,000 --> 00:00:29,000
And this lesson I will show you how to create a threat with five different ways.
8
00:00:29,000 --> 00:00:35,000
We are going to learn such basic laws for multithreaded in general threat and one of the most important
9
00:00:35,000 --> 00:00:36,000
interfaces.
10
00:00:36,000 --> 00:00:37,000
Runnable.
11
00:00:37,000 --> 00:00:43,000
While showing you examples, I will focus your attention on main properties of threat class to describe
12
00:00:43,000 --> 00:00:44,000
each state.
13
00:00:44,000 --> 00:00:50,000
And once we Iran's threats, we will learn with you how we can interact execution of a threat.
14
00:00:50,000 --> 00:00:56,000
We'll discuss methods that are deprecated for a long time already and that you never should use.
15
00:00:56,000 --> 00:00:59,000
And also we'll talk about proper ways of threat interaction.
16
00:01:00,000 --> 00:01:03,000
Today, we're going to have a lot of good examples.
17
00:01:03,000 --> 00:01:09,000
And as we will go over the examples, I will also explain specifics of some methods and behavior of
18
00:01:09,000 --> 00:01:09,000
threats.
19
00:01:10,000 --> 00:01:10,000
Let's start.
20
00:01:11,000 --> 00:01:17,000
And as I said before, let's start from the understanding the whole lifecycle of a threat is considered
21
00:01:17,000 --> 00:01:18,000
to be a new one.
22
00:01:18,000 --> 00:01:20,000
We just created an object of a threat.
23
00:01:21,000 --> 00:01:23,000
And you know that in Java, everything is an object.
24
00:01:24,000 --> 00:01:28,000
That's why threat of execution is also an object to run a threat.
25
00:01:28,000 --> 00:01:35,000
We need to start massive because mass that creates a separate threat of execution within the Java process.
26
00:01:36,000 --> 00:01:38,000
After that threat is in the running state.
27
00:01:38,000 --> 00:01:44,000
In this state, we can make our threat not run by turning our threat into waiting state or block state.
28
00:01:45,000 --> 00:01:50,000
During this course, we will discuss all these scenarios, for example, when threat is blocked and
29
00:01:50,000 --> 00:01:57,000
when it's waiting for now, you need just to understand that running threat may be put on pause and
30
00:01:57,000 --> 00:02:01,000
getting back to running state again as engineers will learn how to do this.
31
00:02:02,000 --> 00:02:06,000
Sometimes threats waiting their chance to update a shared resource.
32
00:02:06,000 --> 00:02:12,000
Sometimes we want to make a threat, wait until other threats will adjust it of our shared resource.
33
00:02:12,000 --> 00:02:16,000
And the last possible state of our threat is a Terminator's state.
34
00:02:16,000 --> 00:02:21,000
This state tells us that threat finished its execution or it was interrupted.
35
00:02:22,000 --> 00:02:24,000
Is it clear now when you're no threat?
36
00:02:24,000 --> 00:02:27,000
Life-cycle it is time to write our first.
37
00:02:27,000 --> 00:02:32,000
Just read an application I open file was named first just writing program.
38
00:02:32,000 --> 00:02:34,000
I have main message here.
39
00:02:34,000 --> 00:02:37,000
Let me go line by line and explain you each role here.
40
00:02:38,000 --> 00:02:44,000
You can see that the first thing that I do here, I declare a variable of type Runnable and initialize
41
00:02:44,000 --> 00:02:46,000
it with new object of type default.
42
00:02:46,000 --> 00:02:47,000
Runnable.
43
00:02:47,000 --> 00:02:52,000
Let me open source code of Runnable type, because you see this time the first time in this course,
44
00:02:53,000 --> 00:02:56,000
as you can see, this is an interface from the Java version.
45
00:02:56,000 --> 00:03:01,000
What does a functional interface was only one abasic mass with name.
46
00:03:01,000 --> 00:03:01,000
Right.
47
00:03:02,000 --> 00:03:06,000
We see that this method returns nassan and return type is void.
48
00:03:06,000 --> 00:03:13,000
This is exactly the method that we need to implement and where we need to put a code that will be executed
49
00:03:13,000 --> 00:03:18,000
in the separate thread to have separate thread, we need to have instructions about what this thread
50
00:03:18,000 --> 00:03:23,000
is supposed to do and these instructions should be written somewhere.
51
00:03:23,000 --> 00:03:26,000
This is exactly the method that will be executed by thread.
52
00:03:27,000 --> 00:03:33,000
Let's now check the source code of a default runnable we see as a default Runnable implements Runnable
53
00:03:33,000 --> 00:03:34,000
interface.
54
00:03:34,000 --> 00:03:41,000
Basically, this is my custom clause that gives implementation to run Macel inside this matter.
55
00:03:41,000 --> 00:03:43,000
I print such text to console.
56
00:03:43,000 --> 00:03:45,000
I'm a new threat.
57
00:03:45,000 --> 00:03:52,000
My name is and here I call static method on class will learn this class in a minute.
58
00:03:52,000 --> 00:03:58,000
But just to finish explanation of this line, current threat is a static method of threat class that
59
00:03:58,000 --> 00:04:00,000
returns the reference to the threat object.
60
00:04:01,000 --> 00:04:08,000
And depending on where this method is invoked, we receive the reference to the object of current threat.
61
00:04:08,000 --> 00:04:13,000
And after that I just call that name method that returns is a name of the threat.
62
00:04:13,000 --> 00:04:18,000
I want to bring this text to console to prove that we have separate threat of execution.
63
00:04:18,000 --> 00:04:20,000
One will run our app.
64
00:04:20,000 --> 00:04:24,000
But before doing that, let's investigate threat glass.
65
00:04:24,000 --> 00:04:26,000
Let me open the source code of this class.
66
00:04:27,000 --> 00:04:31,000
The first thing is that you can notice here is that threat also implements Runnable.
67
00:04:32,000 --> 00:04:33,000
What does this mean?
68
00:04:33,000 --> 00:04:38,000
This means that the object of threat type also may be executed as a separate threat.
69
00:04:38,000 --> 00:04:42,000
And this class also has implementation of around MassArt.
70
00:04:42,000 --> 00:04:43,000
Let's look at it.
71
00:04:43,000 --> 00:04:49,000
As we can see, the first things that object will try to do is to check whether we have target field
72
00:04:49,000 --> 00:04:49,000
initialized.
73
00:04:49,000 --> 00:04:53,000
And if yes, then we'll call run Masset on that object.
74
00:04:54,000 --> 00:04:57,000
And if not, then we'll just do nothing.
75
00:04:57,000 --> 00:05:02,000
Target Field has Runnable type and we can see even Kermanshah above this field.
76
00:05:02,000 --> 00:05:03,000
This is something.
77
00:05:03,000 --> 00:05:08,000
What will be around so as you can understand, we can do two things here.
78
00:05:08,000 --> 00:05:16,000
We can pass Runnable object to the threat glass or we can override run Masad in Third-Class, we can
79
00:05:16,000 --> 00:05:18,000
pass Runnable to this class.
80
00:05:18,000 --> 00:05:19,000
We are constructor.
81
00:05:19,000 --> 00:05:23,000
We have really a lot of different versions of constructor for this type.
82
00:05:23,000 --> 00:05:30,000
And one of the constructor is to accept and initialize target field to store the reference to the Runnable
83
00:05:30,000 --> 00:05:30,000
object.
84
00:05:31,000 --> 00:05:37,000
Interesting thing to notice here is that this constructor invokes another version of constructor.
85
00:05:37,000 --> 00:05:39,000
It passes in reference to the REDgroup.
86
00:05:40,000 --> 00:05:42,000
We'll discuss a little bit later.
87
00:05:42,000 --> 00:05:48,000
What does it reference to our Runnable object name of the thread, which consists of the word thread
88
00:05:48,000 --> 00:05:50,000
dash and the sequential number.
89
00:05:50,000 --> 00:05:53,000
Is it a static variable name thread in it?
90
00:05:53,000 --> 00:06:00,000
No, that is incremented every time when the next threatener method and the last argument is a stack
91
00:06:00,000 --> 00:06:07,000
size zero because according to the recommendation, in case this argument is zero, we have no requirement
92
00:06:07,000 --> 00:06:09,000
for specific text size for this new threat.
93
00:06:10,000 --> 00:06:15,000
And the new constructor Interent calls new constructor that passes to more arguments.
94
00:06:15,000 --> 00:06:23,000
New and true new value is supposed to cover such constructor argument as access control context and
95
00:06:23,000 --> 00:06:29,000
true value is the flag to indicate whether we need to inherit initial values for inheritable threat
96
00:06:29,000 --> 00:06:31,000
logos from the construction threat.
97
00:06:32,000 --> 00:06:34,000
Let me explain what these things meant.
98
00:06:35,000 --> 00:06:42,000
Access control context is a type that is used to create objects that make system access decisions based
99
00:06:42,000 --> 00:06:44,000
on the context it encapsulates.
100
00:06:44,000 --> 00:06:50,000
Check permission Massada that is invoked in the context that access control context encapsulates inside
101
00:06:51,000 --> 00:06:56,000
is allowed to process was access to resources or access control exception.
102
00:06:56,000 --> 00:07:00,000
Anyway, this is not the topic for the first lesson of not just reading.
103
00:07:00,000 --> 00:07:04,000
And this is not what you will use on a daily basis directly while working with me.
104
00:07:04,000 --> 00:07:05,000
Just read it.
105
00:07:05,000 --> 00:07:07,000
But just in order to let you know.
106
00:07:08,000 --> 00:07:10,000
Regarding the second argument inherits read.
107
00:07:10,000 --> 00:07:13,000
Locals do not pay a lot of attention to this one.
108
00:07:13,000 --> 00:07:20,000
And this moment will cover concept of threat locals and inheritable threat local separately, but ensured
109
00:07:20,000 --> 00:07:26,000
this flag is to tell threat whether we need to inherit values from inheritable threat local from the
110
00:07:26,000 --> 00:07:27,000
construction threat.
111
00:07:27,000 --> 00:07:32,000
And basically after that we proceed with construction of our threat of execution.
112
00:07:33,000 --> 00:07:38,000
Besides the construction of Runnable that we have just discussed, we have also different constructors
113
00:07:38,000 --> 00:07:44,000
that initializes other properties of threat object, for example, threat that takes Runnable and access
114
00:07:44,000 --> 00:07:51,000
control context, constructor that takes REDgroup and Runnable also another popular constructor for
115
00:07:51,000 --> 00:07:54,000
the bag and purposes is constructor with Runnable and string.
116
00:07:54,000 --> 00:08:00,000
String represents the name of the threat and other different variations, including constructors with
117
00:08:00,000 --> 00:08:04,000
taxes and boolean flag to indicate the state of the inherited threat.
118
00:08:04,000 --> 00:08:05,000
The locals flag.
119
00:08:06,000 --> 00:08:07,000
What are the properties?
120
00:08:07,000 --> 00:08:08,000
The threat glass half.
121
00:08:09,000 --> 00:08:16,000
If we would scroll to the top of this file, will find properties that we also may use during the configuration
122
00:08:16,000 --> 00:08:16,000
of the threat.
123
00:08:17,000 --> 00:08:19,000
You already know about threatening property.
124
00:08:20,000 --> 00:08:22,000
By the way, here is also new keyword for you.
125
00:08:23,000 --> 00:08:24,000
Volatile will cover it.
126
00:08:24,000 --> 00:08:28,000
Do in the separate lesson we have priority property.
127
00:08:29,000 --> 00:08:35,000
This is a from one to 10 that will be used by threat scheduler to decide what threat is more important
128
00:08:35,000 --> 00:08:36,000
to work with.
129
00:08:36,000 --> 00:08:43,000
So this next, however, we never can rely on the priority property when we have concurrent threat executed.
130
00:08:43,000 --> 00:08:49,000
Let's call this recommendation, but not mandatory direction to follow for threats.
131
00:08:49,000 --> 00:08:50,000
Catala What is a threat?
132
00:08:50,000 --> 00:08:54,000
Skalla It is part of GM that decides which threats should run.
133
00:08:55,000 --> 00:08:58,000
Also, it decides which threats should wait, how it is.
134
00:08:59,000 --> 00:09:03,000
This is a great question, but probably not for the first practical move.
135
00:09:03,000 --> 00:09:06,000
This riding lesson will also cover this topic separately.
136
00:09:07,000 --> 00:09:10,000
The next property here is on by default.
137
00:09:10,000 --> 00:09:11,000
It is false.
138
00:09:12,000 --> 00:09:16,000
We will discuss later in this course what demons threats are interrupted.
139
00:09:16,000 --> 00:09:23,000
Flag is used to indicate where the threat is interrupted and we need to stop its execution or we need
140
00:09:23,000 --> 00:09:25,000
to proceed execution of a threat.
141
00:09:25,000 --> 00:09:26,000
Let in this lesson.
142
00:09:26,000 --> 00:09:30,000
I will also show you how to interact with this property.
143
00:09:31,000 --> 00:09:33,000
Maxfield's here used by Jovian.
144
00:09:33,000 --> 00:09:36,000
We will not focus our attention on them in this lesson.
145
00:09:37,000 --> 00:09:40,000
And probably the one property that we did not talk yet is a threat.
146
00:09:40,000 --> 00:09:48,000
The group this object is used to groups threats to gather in one group support group forms a three and
147
00:09:48,000 --> 00:09:50,000
every threat except a regional threat.
148
00:09:50,000 --> 00:09:51,000
The group has a parent.
149
00:09:52,000 --> 00:09:58,000
There are also some specific self-locking mechanism for threat in that group, but probably will cover
150
00:09:58,000 --> 00:09:59,000
this in a separate lesson.
151
00:10:00,000 --> 00:10:03,000
And it looks like that Tetragon high level of.
152
00:10:03,000 --> 00:10:10,000
You officer red class and its properties definitely as more things to learn here, but we'll do it gradually
153
00:10:10,000 --> 00:10:12,000
and with practical examples, case by case.
154
00:10:13,000 --> 00:10:15,000
Now, let's get back to the demo file here.
155
00:10:15,000 --> 00:10:20,000
You can see that I created a threat object and positive reference to the Runnable object.
156
00:10:20,000 --> 00:10:25,000
Why option was a separate class might be needed in this case.
157
00:10:25,000 --> 00:10:27,000
You can declare some files if needed.
158
00:10:28,000 --> 00:10:34,000
Also, you can declare constructors and pass external resources to the new objects if needed, because
159
00:10:34,000 --> 00:10:38,000
by default, ranma, it doesn't take anything as Masset argument.
160
00:10:38,000 --> 00:10:43,000
And here's just an example of constructor initialization of the state of this object.
161
00:10:44,000 --> 00:10:51,000
If we want, we can pass any external object to the constructor and use the state of our runnable object
162
00:10:51,000 --> 00:10:53,000
in one method if needed.
163
00:10:53,000 --> 00:10:58,000
In such a way you can just share the resource that we shared with this thread.
164
00:10:59,000 --> 00:11:05,000
This is basically the first way to create a threat object that is ready to be executed and that is in
165
00:11:05,000 --> 00:11:06,000
your state.
166
00:11:06,000 --> 00:11:09,000
The next way is another variation of the first one.
167
00:11:10,000 --> 00:11:15,000
Instead of creating type that implements Runnable, we can just pass instance of anonymous class.
168
00:11:16,000 --> 00:11:19,000
You can see here that I have similar method implemented.
169
00:11:20,000 --> 00:11:22,000
Basically nothing special to highlight here.
170
00:11:23,000 --> 00:11:27,000
And to be honest, this way of creating threat is not very popular.
171
00:11:28,000 --> 00:11:34,000
The next way to great threat is to extend a new class from the threat and all around Massett, if you
172
00:11:34,000 --> 00:11:41,000
remember when we were you in threat object, we saw that there is nothing to execute by default if we
173
00:11:41,000 --> 00:11:44,000
didn't pass the reference to the Runnable object.
174
00:11:44,000 --> 00:11:48,000
That's why so radically we can just override one method.
175
00:11:49,000 --> 00:11:54,000
You can see that the current class extends threat clause and we overwrite one method here.
176
00:11:55,000 --> 00:12:00,000
And after that, the main method is simply create the object of the first sorting program type.
177
00:12:01,000 --> 00:12:01,000
That's it.
178
00:12:02,000 --> 00:12:08,000
While this option often described in the literature, don't recommend it to you this way.
179
00:12:08,000 --> 00:12:08,000
Why?
180
00:12:09,000 --> 00:12:13,000
Because he extends that class just to overwrite one method.
181
00:12:13,000 --> 00:12:18,000
Probably it is not the best approach from the single responsibility principle point of view.
182
00:12:19,000 --> 00:12:25,000
For such purposes we have Runnable type and we can use it to give implementation to run Macit.
183
00:12:25,000 --> 00:12:32,000
The fourth way to prepare a threat for execution is to use lambda expression to implement around Macit.
184
00:12:32,000 --> 00:12:34,000
She can see that I created lambda function.
185
00:12:34,000 --> 00:12:37,000
That takes no arguments and returns nassan.
186
00:12:38,000 --> 00:12:44,000
Basically I just print the same text and the last, but not least for today, is the way preparing A
187
00:12:45,000 --> 00:12:46,000
was MassArt reference.
188
00:12:46,000 --> 00:12:53,000
I have a static method declared in this class with name execute that takes no parameters and that brings
189
00:12:53,000 --> 00:12:55,000
the same text to cancel.
190
00:12:55,000 --> 00:13:00,000
I just passing method reference here that meets the definition of Runnable interface.
191
00:13:00,000 --> 00:13:06,000
It doesn't take any arguments and it returns nassan the same as around Massett.
192
00:13:06,000 --> 00:13:12,000
In case you are not familiar with lambda functions and method references in Java, but you want to learn
193
00:13:12,000 --> 00:13:12,000
that.
194
00:13:13,000 --> 00:13:16,000
Check my functional programming course for Java InGenius.
195
00:13:16,000 --> 00:13:22,000
We have really a lot of examples that the next thing that you see in this line and a sprinkling of the
196
00:13:22,000 --> 00:13:27,000
current threat to console and for the sake of example, call run Nassib.
197
00:13:27,000 --> 00:13:36,000
Remember, Run Masset doesn't start as a threat of execution, only start MassArt starts separate thread.
198
00:13:36,000 --> 00:13:42,000
But if you would call directly around MassArt, you would just execute run MassArt synchronously.
199
00:13:43,000 --> 00:13:47,000
And after that I call starts MassArt on each thread that we created here.
200
00:13:47,000 --> 00:13:53,000
Let's run the program to see what we have got in the console in the first line with the printed text
201
00:13:53,000 --> 00:14:02,000
from my main threat here you can see the text current threatening is and its name is Main Man is the
202
00:14:02,000 --> 00:14:09,000
name of the first read that we have in our Java application is the next line is a result of invocation
203
00:14:09,000 --> 00:14:10,000
of FRAND method.
204
00:14:10,000 --> 00:14:13,000
And as you can see, threatening is still man.
205
00:14:13,000 --> 00:14:19,000
That proves that invocation of method doesn't actually start a new threat.
206
00:14:20,000 --> 00:14:27,000
And to start a new threat, we need to start Macit after you can see multiple lines with different names
207
00:14:27,000 --> 00:14:28,000
of a threat.
208
00:14:29,000 --> 00:14:34,000
That is exactly what is returned by getting the same method on the current threat involved from the
209
00:14:34,000 --> 00:14:35,000
threat.
210
00:14:35,000 --> 00:14:42,000
And you remember that by default, naming convention for each threat is threat word and sequential number
211
00:14:42,000 --> 00:14:42,000
of a threat.
212
00:14:43,000 --> 00:14:47,000
Can you understand now how to run your threat in real life?
213
00:14:47,000 --> 00:14:50,000
You often use executor's to run and manage.
214
00:14:50,000 --> 00:14:53,000
Your threats will learn executor's later in this course.
215
00:14:54,000 --> 00:15:00,000
But what we have learned in this lesson, this is basics that you need to understand before moving further.
216
00:15:01,000 --> 00:15:02,000
Now, what do we know how?
217
00:15:03,000 --> 00:15:08,000
To start the threat, let's learn how to interact and stop its execution.
218
00:15:08,000 --> 00:15:16,000
I have separate file for that was name interrupt them is interesting app that will help you to understand
219
00:15:16,000 --> 00:15:17,000
how threat interception works.
220
00:15:18,000 --> 00:15:20,000
Let's start from the main mast.
221
00:15:20,000 --> 00:15:24,000
The first thing that I do here, create a task for execution.
222
00:15:24,000 --> 00:15:31,000
I implement it runnable interface in this class for the sake of this demo and not having multiple classes
223
00:15:31,000 --> 00:15:31,000
in this example.
224
00:15:32,000 --> 00:15:35,000
I will show you around Massud in the minute after this.
225
00:15:35,000 --> 00:15:41,000
I create a threat object and start a threat and I won't let the main threat sleep for two seconds and
226
00:15:41,000 --> 00:15:44,000
interrupt my task after two seconds.
227
00:15:44,000 --> 00:15:45,000
How I can do this?
228
00:15:46,000 --> 00:15:49,000
I invoke sleep masset on the threat object.
229
00:15:49,000 --> 00:15:53,000
This method takes a number of milliseconds as Masset argument.
230
00:15:54,000 --> 00:15:57,000
Two seconds are equal to two thousand milliseconds.
231
00:15:57,000 --> 00:16:00,000
Sleep method is our law that in threat class.
232
00:16:01,000 --> 00:16:02,000
Let's look at the threat clause.
233
00:16:02,000 --> 00:16:03,000
Source code.
234
00:16:03,000 --> 00:16:05,000
We have to sleep massas here.
235
00:16:05,000 --> 00:16:12,000
One was milliseconds only and another one takes two arguments, milliseconds and nanoseconds.
236
00:16:12,000 --> 00:16:14,000
To be honest, I never used sleep mass.
237
00:16:14,000 --> 00:16:19,000
It was nanoseconds, but still it is good to know that such method exists.
238
00:16:19,000 --> 00:16:26,000
Let's get back to our demo file, another really user friendly interface of making sure that sleep is
239
00:16:26,000 --> 00:16:28,000
to use time unit in from Javitz.
240
00:16:28,000 --> 00:16:29,000
You can current package.
241
00:16:30,000 --> 00:16:36,000
This enum represents time duration at the given unit of granularity and provides methods to convert
242
00:16:36,000 --> 00:16:40,000
across units and perform timing and delay operations.
243
00:16:40,000 --> 00:16:47,000
In these units, for example, you may perform such operations as making Meinzer slip, and the interface
244
00:16:47,000 --> 00:16:52,000
allows us to not calculate milliseconds and convert them between seconds and other time units.
245
00:16:52,000 --> 00:16:53,000
One unit.
246
00:16:53,000 --> 00:16:59,000
But we can just take time units that we need and parse the value of the specific time unit that we need.
247
00:17:00,000 --> 00:17:03,000
For example, here is a line similar to the one above.
248
00:17:04,000 --> 00:17:10,000
It also uses milliseconds time unit and here is a line that use a second time unit.
249
00:17:10,000 --> 00:17:12,000
And I'm just saying two seconds.
250
00:17:12,000 --> 00:17:16,000
To be honest, in my opinion, using this API is more preferable.
251
00:17:17,000 --> 00:17:24,000
And after this line, my main threat is in on the running state, in wait in state and the one threat
252
00:17:24,000 --> 00:17:26,000
is awaiting as a threat may interrupt it.
253
00:17:27,000 --> 00:17:31,000
That's why Slakey method maestro so called interrupted exception.
254
00:17:32,000 --> 00:17:39,000
And that's why Compiler makes us handle this exception case to describe how a system should behave in
255
00:17:39,000 --> 00:17:41,000
case somebody will interrupt this thread.
256
00:17:41,000 --> 00:17:46,000
In this example, nobody will interrupt main threat but still interrupted.
257
00:17:46,000 --> 00:17:47,000
Exception is checked.
258
00:17:47,000 --> 00:17:53,000
That's why we need Searls declaration here in Maine method because for the sake of this demo, I don't
259
00:17:53,000 --> 00:17:55,000
want to create try catch block here.
260
00:17:55,000 --> 00:17:59,000
After that I print a console that I interact as a threat.
261
00:18:00,000 --> 00:18:01,000
To interrupt as a threat.
262
00:18:01,000 --> 00:18:07,000
We should call interrupt method interrupt method interruption flag inside the threat object.
263
00:18:08,000 --> 00:18:12,000
That flag basically has two possible values, true or false.
264
00:18:12,000 --> 00:18:19,000
With the help of this method, we can change the state of the interaction flag inside the threat and
265
00:18:19,000 --> 00:18:23,000
the last line and my main threat is print and leave in the console.
266
00:18:23,000 --> 00:18:27,000
Let's now look at our task and understand how interrupt.
267
00:18:27,000 --> 00:18:30,000
Masset interrupts execution of the threat.
268
00:18:30,000 --> 00:18:32,000
I open one method.
269
00:18:32,000 --> 00:18:39,000
I print text that indicates that I entered one method and the threat is about to execute Vork method.
270
00:18:40,000 --> 00:18:41,000
I invoke Vork method.
271
00:18:42,000 --> 00:18:43,000
Let's look at it now.
272
00:18:44,000 --> 00:18:47,000
Work method is that was the infinite loop.
273
00:18:47,000 --> 00:18:49,000
After that we just print one word.
274
00:18:50,000 --> 00:18:52,000
Verkin in f close.
275
00:18:52,000 --> 00:18:55,000
I check if threat is interrupted is interrupted.
276
00:18:55,000 --> 00:19:02,000
Matthew Chance is a state of the interaction flat and in case somebody from as a threat called MassArt
277
00:19:02,000 --> 00:19:07,000
interrupt like we did in our main threat, then this method will return.
278
00:19:07,000 --> 00:19:07,000
True.
279
00:19:08,000 --> 00:19:13,000
Right now you already know what is done by interrupt and by is interrupted masses.
280
00:19:14,000 --> 00:19:16,000
But why do we need interrupted?
281
00:19:16,000 --> 00:19:24,000
Macit interrupted Massata returns also boolean value and return state of the interaction flac but it
282
00:19:24,000 --> 00:19:28,000
also clears it and return it back to false.
283
00:19:28,000 --> 00:19:35,000
So in case what uncommon this line and will executed interruption flag will be turned back to false
284
00:19:35,000 --> 00:19:36,000
again.
285
00:19:36,000 --> 00:19:42,000
To interrupt this thread I will keep this line commanded and we'll just leave it as an example for you.
286
00:19:42,000 --> 00:19:49,000
By the way, I encourage you to download this service code example from the GitHub and run it locally
287
00:19:49,000 --> 00:19:49,000
on your computer.
288
00:19:50,000 --> 00:19:55,000
By doing this, you can play with values and comment and comment the lines that you are interested in
289
00:19:55,000 --> 00:20:00,000
and as always, service code examples in attachments to this lesson.
290
00:20:00,000 --> 00:20:02,000
OK, so now I believe.
291
00:20:03,000 --> 00:20:08,000
The difference between these three methods interact is interrupted and interrupted.
292
00:20:08,000 --> 00:20:14,000
Now pay attention that threat is moved to the white state because and will sleep mass at here.
293
00:20:14,000 --> 00:20:21,000
And by the way, no matter how long sleep will be, I put one millisecond here for sleep.
294
00:20:21,000 --> 00:20:24,000
But still, it is enough to interrupt the threat.
295
00:20:24,000 --> 00:20:25,000
What will happen?
296
00:20:25,000 --> 00:20:28,000
One threat will be a sleep take into account.
297
00:20:28,000 --> 00:20:35,000
I'm in this safe block because interrupted FLAC is equal to true and the threat is invading state.
298
00:20:35,000 --> 00:20:38,000
My threat will be interrupted and interrupted.
299
00:20:38,000 --> 00:20:40,000
Exceptions will be thrown.
300
00:20:40,000 --> 00:20:48,000
This line will not be executed never because interrupted exception will be thrown this mass Atheros
301
00:20:48,000 --> 00:20:52,000
interrupted exception without any handlin to the upper level.
302
00:20:53,000 --> 00:20:58,000
And here we should print interrupted in the work method and return from around Macit.
303
00:20:58,000 --> 00:21:05,000
As you can see here, I have tried Kedge Block because sleep mass my throat checked exception and work
304
00:21:05,000 --> 00:21:08,000
method doesn't handle this potential exception inside.
305
00:21:08,000 --> 00:21:11,000
Let's run this program now for two seconds.
306
00:21:11,000 --> 00:21:18,000
Program will bring to console working until threat will be interrupted and once it is interrupted,
307
00:21:18,000 --> 00:21:19,000
let's see what we have.
308
00:21:19,000 --> 00:21:26,000
The first thing that happened is threat interruption and even after that you can see that I printed
309
00:21:26,000 --> 00:21:27,000
reconvert.
310
00:21:27,000 --> 00:21:34,000
That is because I just changed interaction flac and I still need to wait until the threat will be in
311
00:21:34,000 --> 00:21:34,000
a waiting mode.
312
00:21:35,000 --> 00:21:43,000
This text in the main living tells us that Main Street finished its execution and after that we see
313
00:21:43,000 --> 00:21:44,000
that we enter it if block.
314
00:21:44,000 --> 00:21:47,000
And here is a status of interrupted flac.
315
00:21:47,000 --> 00:21:49,000
It is equal to true.
316
00:21:49,000 --> 00:21:56,000
The next step in our execution is entering the catch block and print and that threat was interrupted
317
00:21:56,000 --> 00:21:56,000
in the work.
318
00:21:56,000 --> 00:21:57,000
MassArt.
319
00:21:57,000 --> 00:21:58,000
That's it.
320
00:21:59,000 --> 00:22:05,000
So the rule of thumb, when you're creating all rain app, think about what is a logical point in your
321
00:22:05,000 --> 00:22:08,000
thread to allow other threats to interrupt it.
322
00:22:08,000 --> 00:22:12,000
In case you have such possibility to introduce this point, do it.
323
00:22:13,000 --> 00:22:16,000
Usually you would let your threat fall asleep.
324
00:22:16,000 --> 00:22:21,000
After all, resources are adjusted and state of the system is consistent.
325
00:22:21,000 --> 00:22:24,000
In this case, there is no harm to interrupt the threat.
326
00:22:25,000 --> 00:22:31,000
There are some methods that you should never use and that are marked as deprecated but not removed from
327
00:22:31,000 --> 00:22:34,000
Janicki only because of the backwards compatibility.
328
00:22:34,000 --> 00:22:38,000
Ziya, stop, suspend and resume.
329
00:22:39,000 --> 00:22:46,000
These are dangerous masses in terms they are stop, suspend or resume threat execution instantly without
330
00:22:46,000 --> 00:22:47,000
bothering.
331
00:22:47,000 --> 00:22:53,000
What process is happening right now inside the threat, taking into account not all operations at ATOMIC
332
00:22:53,000 --> 00:22:57,000
and performed with one single operation of updating data in the memory.
333
00:22:58,000 --> 00:23:01,000
You can start somewhere in the middle of data processing in your threat.
334
00:23:02,000 --> 00:23:05,000
At the meantime, resource will be updated as a threat.
335
00:23:05,000 --> 00:23:11,000
And when you will resume execution, you may end up with not consistent state of your objects.
336
00:23:11,000 --> 00:23:18,000
We will talk about atomic operations in adolescence, but I believe you understood that stopping a suspension
337
00:23:18,000 --> 00:23:25,000
and after that resume and execution of the threat in case it is made some calculation process is not
338
00:23:25,000 --> 00:23:26,000
the best idea.
339
00:23:26,000 --> 00:23:29,000
And one more interesting and lasting for today's lesson.
340
00:23:30,000 --> 00:23:34,000
Probably you saw one comment line here where I invoke June Masset.
341
00:23:35,000 --> 00:23:36,000
What is it?
342
00:23:36,000 --> 00:23:40,000
Let me uncommented first and run up one more time.
343
00:23:40,000 --> 00:23:44,000
What's changed now in this version line?
344
00:23:44,000 --> 00:23:47,000
Zatarain's in the main Leesville will always be printed.
345
00:23:47,000 --> 00:23:48,000
Lost.
346
00:23:48,000 --> 00:23:49,000
Why?
347
00:23:49,000 --> 00:23:56,000
Because Join Masset also put our main threat in great state until this threat will be completely finished.
348
00:23:56,000 --> 00:23:59,000
So I gave a command with this line to join.
349
00:23:59,000 --> 00:24:01,000
This thread does a current one.
350
00:24:02,000 --> 00:24:08,000
That's why my app will wait until Perry's threat will be completely executed during Masad.
351
00:24:08,000 --> 00:24:15,000
Also, Masroor interrupted exception, taking into account it puts current threat wait in state and
352
00:24:15,000 --> 00:24:20,000
other threats might interrupt this threat while it is innervate state.
353
00:24:20,000 --> 00:24:21,000
Is it clear?
354
00:24:21,000 --> 00:24:25,000
Basically, that's all what I wanted to share with you in this lesson.
355
00:24:26,000 --> 00:24:28,000
Let's recap what we have learned today.
356
00:24:28,000 --> 00:24:34,000
In this lesson, we learned the life cycle of the threat and how state of the threat is changed from
357
00:24:34,000 --> 00:24:36,000
the new disseminated.
358
00:24:36,000 --> 00:24:39,000
We learned five ways how to run a threat.
359
00:24:39,000 --> 00:24:43,000
Also in this lesson, we performed over a year of threat class.
360
00:24:43,000 --> 00:24:48,000
Now, you know, main properties of this type, we learned a radical interface.
361
00:24:48,000 --> 00:24:51,000
Now you know how to use it to execute a separate threat.
362
00:24:52,000 --> 00:24:55,000
And at the end of the lesson, we learned how to interrupt threat.
363
00:24:56,000 --> 00:24:59,000
Hope you enjoyed the lesson and you like the examples.
364
00:24:59,000 --> 00:25:02,000
We still have a lot of other things to learn, but.
365
00:25:02,000 --> 00:25:08,000
I think that they will have enough information to remember, make sure you understand this lesson before
366
00:25:08,000 --> 00:25:12,000
moving further, because multithreaded is not the easiest topic.
367
00:25:12,000 --> 00:25:18,000
And we need to be very careful with understanding each concept in sequential order, because it would
368
00:25:18,000 --> 00:25:22,000
be hard to understand one thing without understanding the previous one.
369
00:25:22,000 --> 00:25:23,000
Thanks a lot for your attention.
370
00:25:24,000 --> 00:25:27,000
Have a great day and see you in the next lesson.