{"id":9708,"date":"2022-01-20T07:12:46","date_gmt":"2022-01-20T07:12:46","guid":{"rendered":"https:\/\/prwatech.in\/blog\/?p=9708"},"modified":"2024-04-11T09:38:20","modified_gmt":"2024-04-11T09:38:20","slug":"scala-multithreading","status":"publish","type":"post","link":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/","title":{"rendered":"SCALA- MULTITHREADING"},"content":{"rendered":"<p>&lt;h2&gt;<span data-contrast=\"auto\">Multithreading is designed for multitasking.<\/span><span data-ccp-props=\"&quot;{&quot;\">&lt;\/h2&gt;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b><span data-contrast=\"auto\">Life Cycle of Thread:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">Run-Runnable (means about to lunch)-running -block (block means hold) then again go back to runnable then running -terminated.<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Thread is a class:<\/span><\/b><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">extend Thread<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">implemented from runnable trait\u2019<\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Example:<\/span><\/b><\/p>\n<p><span data-contrast=\"none\">package <\/span><span data-contrast=\"none\">com.multi.thread<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class MultiThreadClas extends Thread {\u00a0\r\n\r\n\u00a0 override def run() ={ \/\/run method is already define in thread method so need to override\u00a0\r\n\r\n\u00a0\u00a0\u00a0 println(\"Thread is running\")\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n\u00a0\r\n\r\n}\u00a0\r\n\r\nobject Multi { \/\/create an object\u00a0\r\n\r\n\u00a0 def main(args: Array[String]) = {\u00a0\r\n\r\n\u00a0\u00a0\u00a0 val me = new MultiThreadClas() \/\/create an instance from MultiThreadClas\u00a0\r\n\r\n\u00a0\u00a0\u00a0 me.start()\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><b><span data-contrast=\"auto\">Output:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">Thread is running<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">Process finished with exit code 0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Explanation:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">In the above example, a start is a method it automatically goes and calls the run method, and whatever we write there start method prints them.<\/span><\/p>\n<p><b><span data-contrast=\"auto\">There is another option to implement this thread<\/span><\/b><\/p>\n<h4><b><span data-contrast=\"auto\">Example:<\/span><\/b><\/h4>\n<p><span data-contrast=\"none\">package <\/span><span data-contrast=\"none\">com.multi.thread<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class MultiThreadClass2 extends Runnable{\u00a0\u00a0\u00a0 \/\/Runnable is one thread in scala\u00a0\r\n\r\noverride def run() ={\u00a0\r\n\r\n\u00a0 println(\"this will also run and implemented from trait\")\u00a0\r\n\r\n}\u00a0\r\n\r\n}\u00a0\r\n\r\nobject Mutlti2 {\u00a0\r\n\r\n\u00a0 def main(args: Array[String]) = {\u00a0\r\n\r\n\u00a0\u00a0\u00a0 val mult2 = new MultiThreadClass2()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 val e = new Thread(mult2) \/\/create one thread from mult2 and pass this mult2 this is called implementation\u00a0\r\n\r\n\u00a0\u00a0\u00a0 e.start()\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><b><span data-contrast=\"auto\">Output:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">this will also run and implemented from trait<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">Process finished with exit code 0<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4><b><span data-contrast=\"auto\">There is another method sleep\u00a0<\/span><\/b><\/h4>\n<p><b><span data-contrast=\"auto\">sleep<\/span><\/b><span data-contrast=\"auto\"> is one method here mills means milliseconds .as here mentioned 1000ms so they will wait for 1 second and then print it. we have created two threads using single class MultiThreadClass2<\/span><\/p>\n<p><span data-contrast=\"auto\">So <\/span><b><span data-contrast=\"auto\">t1.start()<\/span><\/b><span data-contrast=\"auto\"> and <\/span><b><span data-contrast=\"auto\">t2.start()<\/span><\/b><span data-contrast=\"auto\"> calling so 1 will be printed first and t2 will also print 1 and then 2 2 so every print will come after 1 second. The result will be given below.<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Example:<\/span><\/b><\/p>\n<p><span data-contrast=\"none\">package <\/span><span data-contrast=\"none\">com.multi.thread<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"none\">class <\/span><span data-contrast=\"none\">MultiThreadClass3 <\/span><span data-contrast=\"none\">extends <\/span><span data-contrast=\"none\">Thread{<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">override def run(): Unit ={\u00a0\r\n\r\n\u00a0\u00a0\u00a0 for(i&lt;- 1 to 7) {\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 println(i)\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Thread.sleep(1000)\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\nobject mainObc{\u00a0\r\n\r\n\u00a0 def main(args:Array[String])={\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t1 = new MultiThreadClass3()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t2 =new MultiThreadClass3\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.start()\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"none\">\u00a0 <\/span><b><span data-contrast=\"auto\">Output:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Explanation:\u00a0<\/span><\/b><span data-contrast=\"auto\"> In the above example code. Why we are getting two times because we are running two threads.\u00a0<\/span><\/p>\n<h4><b><span data-contrast=\"auto\">Another example of the sleep method\u00a0<\/span><\/b><\/h4>\n<p><b><span data-contrast=\"auto\">Example:\u00a0<\/span><\/b><\/p>\n<p><span data-contrast=\"none\">package <\/span><span data-contrast=\"none\">com.multi.thread<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class MultiThreadClass3 extends Thread{\u00a0\r\n\r\n\u00a0 override def run(): Unit ={\u00a0\r\n\r\n\u00a0\u00a0\u00a0 for(i&lt;- 1 to 7) {\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 println(i)\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Thread.sleep(1000)\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\nobject mainObc {\u00a0\r\n\r\n\u00a0 def main(args: Array[String]) = {\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t1 = new MultiThreadClass3()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t2 = new MultiThreadClass3\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t3 = new MultiThreadClass3\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t3.start()\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><b><span data-contrast=\"auto\">Output:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">Process finished with exit code 0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Explanation<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><span data-contrast=\"auto\">after this, I don\u2019t know which thread is running at what time. I don\u2019t know which one is first and which one is second. first and second, are unknown to me. after one second&#8217;s priority will change. So to know which one is first and second there is one more method is<\/span><b><span data-contrast=\"auto\"> join<\/span><\/b><span data-contrast=\"auto\">.<\/span><\/p>\n<p><b><span data-contrast=\"auto\">join method: <\/span><\/b><span data-contrast=\"auto\">In the join method, I\u2019ll have to create one thing extra. We have to create one more instance and from this thread, we will use it. join<\/span> <span data-contrast=\"auto\">as in the below program I used join with only the t1 so it will print all the thread of t1 first and then the same thing will happen with t2, and t2 as previously as here join method has used for this t1 only. We can also do the same things for t2 and t3.<\/span><\/p>\n<h5><b><span data-contrast=\"auto\">Example1 join has used with t1 only<\/span><\/b><\/h5>\n<p><span data-contrast=\"none\">package <\/span><span data-contrast=\"none\">com.multi.thread<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class MultiThreadClass3 extends Thread{\u00a0\r\n\r\n\u00a0 override def run(): Unit ={\u00a0\r\n\r\n\u00a0\u00a0\u00a0 for(i&lt;- 1 to 7) {\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 println(i)\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Thread.sleep(1000)\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\nobject mainObc {\u00a0\r\n\r\n\u00a0 def main(args: Array[String]) = {\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t1 = new MultiThreadClass3()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t2 = new MultiThreadClass3\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t3 = new MultiThreadClass3\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.join()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t3.start()\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><b><span data-contrast=\"auto\">Output:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">Process finished with exit code 0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Example2 join has been used with all of the t1, t2, and t3\u00a0<\/span><\/b><\/p>\n<p><span data-contrast=\"none\">package <\/span><span data-contrast=\"none\">com.multi.thread<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class MultiThreadClass3 extends Thread{\u00a0\r\n\r\n\u00a0 override def run(): Unit ={\u00a0\r\n\r\n\u00a0\u00a0\u00a0 for(i&lt;- 1 to 7) {\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 println(i)\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Thread.sleep(1000)\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\nobject mainObc {\u00a0\r\n\r\n\u00a0 def main(args: Array[String]) = {\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t1 = new MultiThreadClass3()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t2 = new MultiThreadClass3\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t3 = new MultiThreadClass3\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.join()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.join()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t3.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t3.join()\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><b><span data-contrast=\"auto\">Output:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">Process finished with exit code 0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">getName:<\/span><\/b> <b><span data-contrast=\"auto\">getName <\/span><\/b><span data-contrast=\"auto\">means two functions getName and setName it\u2019s like encapsulation has getter and setter methods. <\/span><b><span data-contrast=\"auto\">getName<\/span><\/b><span data-contrast=\"auto\"> means get the name and<\/span><b><span data-contrast=\"auto\"> setName<\/span><\/b><span data-contrast=\"auto\"> means to set the Name.Working with Multithreading in Scala<\/span><\/p>\n<h4><b><span data-contrast=\"auto\">Example:<\/span><\/b><\/h4>\n<p><span data-contrast=\"none\">package <\/span><span data-contrast=\"none\">com.multi.thread<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class MultiThreadClass4 () extends Thread {\u00a0\r\n\r\n\u00a0 override def run(): Unit ={\u00a0\r\n\r\n\u00a0\u00a0\u00a0 for(i&lt;-0 to 4) {\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 println(this.getName() + \" _ \" + i)\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Thread.sleep(1000)\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\nobject ThreadObject {\u00a0\r\n\r\n\u00a0 def main(args: Array[String]) = {\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t1 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t2 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t3 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t4 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.setName(\"This is the first Thread\")\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.setName(\"This is the second Thread\")\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t3.setName(\"This is the third Thread\")\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t3.start()\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><b><span data-contrast=\"auto\">Output:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread _ 0<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the third Thread _ 0<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread _ 0<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the third Thread _ 1<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread _ 1<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread _ 1<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the third Thread _ 2<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread _ 2<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread _ 2<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread _ 3<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the third Thread _ 3<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread _ 3<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread _ 4<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the third Thread _ 4<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread _ 4<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">Process finished with exit code 0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Explanation:<\/span><\/b> <span data-contrast=\"auto\">This work is based on the system time and also on the clock system clock. We can see this by changing the time. By changing the time order will be changed. The following program shows:<\/span><\/p>\n<h4><b><span data-contrast=\"auto\">Example:<\/span><\/b><\/h4>\n<p><span data-contrast=\"none\">package <\/span><span data-contrast=\"none\">com.multi.thread<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class MultiThreadClass4 () extends Thread {\u00a0\r\n\r\n\u00a0 override def run(): Unit ={\u00a0\r\n\r\n\u00a0\u00a0\u00a0 for(i&lt;-0 to 4) {\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 println(this.getName() + \" _ \" + i)\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Thread.sleep(4000)\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\nobject ThreadObject {\u00a0\r\n\r\n\u00a0 def main(args: Array[String]) = {\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t1 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t2 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t3 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t4 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.setName(\"This is the first Thread\")\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.setName(\"This is the second Thread\")\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t3.setName(\"This is the third Thread\")\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t3.start()\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><b><span data-contrast=\"auto\">Output:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread _ 0<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread _ 0<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the third Thread _ 0<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the third Thread _ 1<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread _ 1<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread _ 1<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the third Thread _ 2<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread _ 2<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread _ 2<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread _ 3<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the third Thread _ 3<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread _ 3<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the third Thread _ 4<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread _ 4<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread _ 4<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">Process finished with exit code 0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">How to set priority:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">By using <\/span><b><span data-contrast=\"auto\">the getpriority <\/span><\/b><span data-contrast=\"auto\">method<\/span><b><span data-contrast=\"auto\">. <\/span><\/b><span data-contrast=\"auto\">We can set the priority that will give the output according to the priority which we have set first.Working with Multithreading in Scala<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Example:<\/span><\/b><\/p>\n<p><span data-contrast=\"none\">package <\/span><span data-contrast=\"none\">com.multi.thread<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class MultiThreadClass4 () extends Thread {\u00a0\r\n\r\n\u00a0 override def run(): Unit ={\u00a0\r\n\r\n\u00a0\u00a0\u00a0 for(i&lt;-0 to 4) {\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 println(this.getName())\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 println(this.getPriority())\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Thread.sleep(200)\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\nobject ThreadObject {\u00a0\r\n\r\n\u00a0 def main(args: Array[String]) = {\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t1 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t2 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t3 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var t4 = new MultiThreadClass4()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.setName(\"This is the first Thread\")\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.setName(\"This is the second Thread\")\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.setPriority(Thread.MAX_PRIORITY)\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.setPriority(Thread.MIN_PRIORITY)\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t1.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 t2.start()\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><b><span data-contrast=\"auto\">Output:\u00a0<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread<\/span><\/p>\n<p><span data-contrast=\"auto\">10<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread<\/span><\/p>\n<p><span data-contrast=\"auto\">10<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread<\/span><\/p>\n<p><span data-contrast=\"auto\">10<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread<\/span><\/p>\n<p><span data-contrast=\"auto\">10<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the second Thread<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first Thread<\/span><\/p>\n<p><span data-contrast=\"auto\">10<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">Process finished with exit code 0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">We can create two functions and can call using this multi threading class:<\/span><\/b><\/p>\n<p><span data-contrast=\"none\">package <\/span><span data-contrast=\"none\">com.multi.thread<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"none\">class <\/span><span data-contrast=\"none\">MultiThreading5 <\/span><span data-contrast=\"none\">extends <\/span><span data-contrast=\"none\">Thread {\u00a0\u00a0\u00a0 <\/span><span data-contrast=\"none\">\/\/ created one class extending thread<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">override def run(): Unit = {\u00a0\r\n\r\n\u00a0\u00a0\u00a0 for (i &lt;- 0 to 7) {\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 println(i)\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Thread.sleep(1000)\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n\u00a0\r\n\r\n\u00a0 def task(): Unit = {\u00a0\r\n\r\n\u00a0\u00a0\u00a0 for (i &lt;- 0 to 7) {\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 println(i)\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 Thread.sleep(200)\u00a0\r\n\r\n\u00a0\u00a0\u00a0 }\u00a0\r\n\r\n\u00a0 }\u00a0\r\n\r\n}\u00a0\r\n\r\nobject MainOBC {\u00a0\r\n\r\n\u00a0 def main(args: Array[String]) = {\u00a0\r\n\r\n\u00a0\u00a0\u00a0 var x1 = new MultiThreading5()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 x1.start()\u00a0\r\n\r\n\u00a0\u00a0\u00a0 x1.task()\u00a0\r\n\r\n\u00a0 }<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><span data-contrast=\"none\">\u00a0 <\/span><b><span data-contrast=\"auto\">Output:<\/span><\/b><\/h3>\n<p><span data-contrast=\"auto\">0<\/span><\/p>\n<p><span data-contrast=\"auto\">0<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">1<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p><span data-contrast=\"auto\">2<\/span><\/p>\n<p><span data-contrast=\"auto\">3<\/span><\/p>\n<p><span data-contrast=\"auto\">4<\/span><\/p>\n<p><span data-contrast=\"auto\">5<\/span><\/p>\n<p><span data-contrast=\"auto\">6<\/span><\/p>\n<p><span data-contrast=\"auto\">7<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span data-contrast=\"auto\">Process finished with exit code 0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Explanation:<\/span><\/b><span data-contrast=\"auto\"> It is coming based on the frequency like we can manage streaming.<\/span><\/p>\n<p><span data-contrast=\"auto\">Threads have many options.<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Spark:<\/span><\/b><\/p>\n<p><b><span data-contrast=\"auto\">Scala framework:<\/span><\/b><span data-contrast=\"auto\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">Scala framework is called spark.<\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">Spark is currently having 3.x generation.<\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Spark:<\/span><\/b><\/p>\n<p><span data-contrast=\"auto\">Spark is created to complete the incapability of MapReduce. As MapReduce is not designed to handle real-time mean near real-time data. So in the year of 2006 people from UC Berkley. They started to talk about real-time processing to the UC Berkley started to the introduction of EMA which is a MapReduce. He found the gap in between after that they said we can create one new framework which we can deal with the real-time dataset of near real-time data i.e. streaming data. Mainly in 2006, the thought came and it came from AMPLab. There was one lab in Berkley that lab later got many appreciations and the many communities accepted. It was acquired sometime later by data bricks company the again donated to Apache they started to handle it.Working with Multithreading in Scala<\/span><\/p>\n<p><span data-contrast=\"auto\">Spark is designed by <\/span><b><span data-contrast=\"auto\">Matei Zaharia<\/span><\/b><span data-contrast=\"auto\"> at UC Berkeley&#8217;s AMPLab. Spark is built on Scala. It also supports Scala, java, python, R, SQL.<\/span><\/p>\n<h4><b><span data-contrast=\"auto\">Why we need spark:<\/span><\/b><span data-contrast=\"auto\">\u00a0<\/span><\/h4>\n<p><span data-contrast=\"auto\">for this, we can compare spark with MapReduce<\/span><\/p>\n<p>Comparison between Spark and MapReduce<b><span data-contrast=\"auto\">MapReduce\u00a0<\/span><\/b><b><span data-contrast=\"auto\">Spark<\/span><\/b><span data-contrast=\"auto\">It came in 2008<\/span><span data-contrast=\"auto\">The spark term comes from the shark. shark means fast to attach. It came in 2012.<\/span><span data-contrast=\"auto\">It can process 1 TB of data\u00a0<\/span><span data-contrast=\"auto\">It can handle 4.27 TB of data.<\/span><span data-contrast=\"auto\">It has 910 nodes to handle it take one minute i.e.60 seconds of time\u00a0<\/span><span data-contrast=\"auto\">It has 209 nodes to handle it take one minute i.e.60 seconds of time<\/span><span data-contrast=\"auto\">It has been designed for batch\/historical data (means store last year data )batch<\/span><span data-contrast=\"auto\">It has been designed to handle near-real-time data<\/span><span data-contrast=\"auto\">Disk computation model<\/span><span data-contrast=\"auto\">In memory model<\/span><\/p>\n<table data-tablestyle=\"MsoTableGrid\" data-tablelook=\"&quot;&lt;b\">\n<tbody>\n<tr>\n<td data-celllook=\"0\"><b><span data-contrast=\"auto\">6.<\/span><\/b><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">Low-level programming model.<\/span><\/td>\n<td data-celllook=\"0\"><span data-contrast=\"auto\">A high level programming model<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><b><span data-contrast=\"auto\">In memory model:<\/span><\/b> <span data-contrast=\"auto\">In memory model means when I say there using heavily cache caching mode of the cache all the data to their memory for intermediate query or interactive query and quite fast 100 times faster than MapReduce<\/span><\/p>\n<p><b><span data-contrast=\"auto\">High-level programming model<\/span><\/b><span data-contrast=\"auto\">. Programming language means we talk about Java Python means we are talking about API somebody has created an application programming interface we are just using API. Somebody has created something and we are using it. Mostly it is a readymade design.<\/span><\/p>\n<h4><b><span data-contrast=\"auto\">Note:<\/span><\/b><span data-contrast=\"auto\">\u00a0<\/span><\/h4>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">Spark is not only dependent on Hadoop.<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">Spark can work with standalone mode.<\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Spark Mode:<\/span><\/b><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">Standalone mode: this means we can download a spark in our system without Hadoop without any dependency and we can work with it. We don\u2019t need any prerequisites.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">HDFS (cluster mode): it needs Hadoop(HDFS). HDFS to store data. Because this is a centralized repository we call data from one system and we extract everything in HDFS.<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">AWS (Amazon web services) we can read S3 bucket from AWS.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><b><span data-contrast=\"auto\">SPARK CORE:<\/span><\/b> <span data-contrast=\"auto\">This means all are the core fundamentals, the CPU requirement, the resource requirement everything we will write in this spark.Working with Multithreading in Scala<\/span><\/p>\n<h4><b><span data-contrast=\"auto\">Spark core contains:<\/span><\/b><\/h4>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">Spark SQL<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">Spark Streaming<\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">Spark graphic<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"&lt;span data-contrast=\">Spark MLLib<\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Spark SQL:<\/span><\/b><span data-contrast=\"auto\"> It gives the <a href=\"https:\/\/www.tableau.com\/\">data<\/a> frame. A Data frame is a collection of structured data. SQL can query on a DBMS data set directly.<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Spark streaming:<\/span><\/b><span data-contrast=\"auto\"><a href=\"https:\/\/prwatech.in\/blog\/\"> Streaming<\/a> means it&#8217;s near-real-time data.<\/span><\/p>\n<p><b><span data-contrast=\"auto\">#spark graphic<\/span><\/b><span data-contrast=\"auto\">: Social media use this<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Spark MLLib:\u00a0<\/span><\/b><span data-contrast=\"auto\">\u00a0 Machine learning library.<\/span><\/p>\n<p>Working with Multithreading in Scala<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&lt;h2&gt;Multithreading is designed for multitasking.&lt;\/h2&gt; &nbsp; Life Cycle of Thread: Run-Runnable (means about to lunch)-running -block (block means hold) then again go back to runnable then running -terminated. Thread is a class: extend Thread implemented from runnable trait\u2019 Example: package com.multi.thread &nbsp; &nbsp; class MultiThreadClas extends Thread {\u00a0 \u00a0 override def run() ={ \/\/run method [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[565,1698],"tags":[560,576],"class_list":["post-9708","post","type-post","status-publish","format-standard","hentry","category-scala","category-scala-modules-scala","tag-a-scala-tutorial","tag-scala"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Working with Multithreading in Scala - Prwatech<\/title>\n<meta name=\"description\" content=\"Master Working with Multithreading in Scala - Dive deep with our expert instructors and comprehensive curriculum.\" \/>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Working with Multithreading in Scala - Prwatech\" \/>\n<meta property=\"og:description\" content=\"Master Working with Multithreading in Scala - Dive deep with our expert instructors and comprehensive curriculum.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/\" \/>\n<meta property=\"og:site_name\" content=\"Prwatech\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prwatech.in\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-20T07:12:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-11T09:38:20+00:00\" \/>\n<meta name=\"author\" content=\"Prwatech\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Eduprwatech\" \/>\n<meta name=\"twitter:site\" content=\"@Eduprwatech\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Prwatech\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/\",\"url\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/\",\"name\":\"Working with Multithreading in Scala - Prwatech\",\"isPartOf\":{\"@id\":\"https:\/\/prwatech.in\/blog\/#website\"},\"datePublished\":\"2022-01-20T07:12:46+00:00\",\"dateModified\":\"2024-04-11T09:38:20+00:00\",\"author\":{\"@id\":\"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3\"},\"description\":\"Master Working with Multithreading in Scala - Dive deep with our expert instructors and comprehensive curriculum.\",\"breadcrumb\":{\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/prwatech.in\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SCALA- MULTITHREADING\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/prwatech.in\/blog\/#website\",\"url\":\"https:\/\/prwatech.in\/blog\/\",\"name\":\"Prwatech\",\"description\":\"Share Ideas, Start Something Good.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/prwatech.in\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3\",\"name\":\"Prwatech\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/prwatech.in\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g\",\"caption\":\"Prwatech\"},\"url\":\"https:\/\/prwatech.in\/blog\/author\/prwatech123\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Working with Multithreading in Scala - Prwatech","description":"Master Working with Multithreading in Scala - Dive deep with our expert instructors and comprehensive curriculum.","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Working with Multithreading in Scala - Prwatech","og_description":"Master Working with Multithreading in Scala - Dive deep with our expert instructors and comprehensive curriculum.","og_url":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/","og_site_name":"Prwatech","article_publisher":"https:\/\/www.facebook.com\/prwatech.in\/","article_published_time":"2022-01-20T07:12:46+00:00","article_modified_time":"2024-04-11T09:38:20+00:00","author":"Prwatech","twitter_card":"summary_large_image","twitter_creator":"@Eduprwatech","twitter_site":"@Eduprwatech","twitter_misc":{"Written by":"Prwatech","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/","url":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/","name":"Working with Multithreading in Scala - Prwatech","isPartOf":{"@id":"https:\/\/prwatech.in\/blog\/#website"},"datePublished":"2022-01-20T07:12:46+00:00","dateModified":"2024-04-11T09:38:20+00:00","author":{"@id":"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3"},"description":"Master Working with Multithreading in Scala - Dive deep with our expert instructors and comprehensive curriculum.","breadcrumb":{"@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/prwatech.in\/blog\/scala\/scala-modules-scala\/scala-multithreading\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/prwatech.in\/blog\/"},{"@type":"ListItem","position":2,"name":"SCALA- MULTITHREADING"}]},{"@type":"WebSite","@id":"https:\/\/prwatech.in\/blog\/#website","url":"https:\/\/prwatech.in\/blog\/","name":"Prwatech","description":"Share Ideas, Start Something Good.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/prwatech.in\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/prwatech.in\/blog\/#\/schema\/person\/db90baff7744090b2288bbc98fea87f3","name":"Prwatech","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/prwatech.in\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c00bafc1b04045f31eda917de39891456c44fa47c092b9bb6be0f860a3a30a2f?s=96&d=mm&r=g","caption":"Prwatech"},"url":"https:\/\/prwatech.in\/blog\/author\/prwatech123\/"}]}},"_links":{"self":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts\/9708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/comments?post=9708"}],"version-history":[{"count":5,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts\/9708\/revisions"}],"predecessor-version":[{"id":11348,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/posts\/9708\/revisions\/11348"}],"wp:attachment":[{"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/media?parent=9708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/categories?post=9708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prwatech.in\/blog\/wp-json\/wp\/v2\/tags?post=9708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}