КОНЦЕПЦИИ SCALA

Как использовать потоки Java в Scala?

Многопоточность - это механизм одновременного выполнения нескольких потоков. Это позволяет одновременно выполнять различные операции.

Потоки - это легкие подпроцессы, которые занимают меньше памяти. Многопоточность можно использовать для создания параллельных приложений в Scala.

Scala не предоставляет отдельной библиотеки для создания потоков. Если вы знакомы с концепцией многопоточности Java, вы узнаете, что она похожа, за исключением синтаксиса самого языка Scala.

Нить можно создать двумя разными способами.

  • Расширение класса Thread
  • Реализация интерфейса Runnable


Класс потока в Scala

Следующий пример наследуется от класса Thread и переопределяет метод run. Используйте метод start (), чтобы зажечь поток.

object Main extends App {
 var thread = new ScalaThreadExample()  
 thread.start() 
}
class ScalaThreadExample extends Thread{  
 override def run(){  
  println("Thread in scala in running !!");  
 }  
}

Реализация интерфейса Runnable в Scala

В следующем примере реализуется интерфейс Runnable и переопределяется метод run. Используйте метод start, чтобы зажечь поток.

object Main extends App {
 var runnableObj = new ScalaRunnableThreadExample()  
 var threadRunnable = new Thread(runnableObj)  
 threadRunnable.start()  
}
class ScalaRunnableThreadExample extends Runnable{  
 override def run(){  
  println("Thread is running using the Runnable interface !!")  
 }  
}

Класс Thread в Scala предоставляет

различные методы для работы с состояниями потока, а именно:

Scala Thread сна ()

Вышеупомянутый процесс позволяет потоку спать на указанное время, указанное в миллисекундах в качестве аргумента.

object Main extends App {
 
 var thread1=new ThreadSleepExample();
 var thread2=new ThreadSleepExample();
 thread1.start()
 thread2.start()
}
class ThreadSleepExample extends Thread{  
 override def run(){  
  for(i<- 0 to 5){  
   println(i)  
   Thread.sleep(500)  
  }  
 }
}

Присоединение к потоку Scala ()

Метод join () ожидает, пока предыдущий поток не умрет, это означает, что процесс join () удерживает выполнение текущего выполняющегося потока до тех пор, пока указанный поток не завершит свое выполнение.

object Main extends App {
 
 var thread3=new ThreadSleepExample();
 thread1.start()
 thread1.join()
 thread2.start()
 thread3.start()
}
class ThreadSleepExample extends Thread{  
 override def run(){  
  for(i<- 0 to 5){  
   println(i)  
   Thread.sleep(500)  
  }  
 }
}

Scala setName ()

Метод setName предоставляет уникальное имя потоку.

объект Main extends App {

var thread4=new ThreadSetNameExample();
 thread4.setName("Thread 4");
 thread4.start()
}
class ThreadSetNameExample() extends Thread{  
 override def run(){  
  for(i<- 0 to 5){  
   println(this.getName()+" - "+i)  
   Thread.sleep(500)  
  }  
 }  
}

Репозиторий GitHub



Зачем использовать потоки?

  • Уменьшает время проявления.
  • Снижает расходы на поддержку.
  • Это помогает повысить производительность сложных приложений.
  • Полезно для отзывчивости пользовательского интерфейса.
  • Потоки используются в серверных приложениях для обеспечения высокой пропускной способности и использования ресурсов.
  • Распараллеливайте задания.
  • Если поток не может использовать все ресурсы ЦП, запуск другого потока может избежать простоя этих ресурсов.

Недостатки:

  • Несколько потоков могут мешать друг другу при совместном использовании общих аппаратных ресурсов.
  • Техническое обслуживание оборудования для многопоточности более очевидно для программного обеспечения, поэтому требуется больше изменений как в прикладных программах, так и в операционных системах, чем для многопроцессорной обработки.

Спасибо за чтение. Продолжайте посещать и поделитесь этим в своей сети. Пожалуйста, оставьте свои мысли и отзывы в разделе комментариев.

Следуйте за мной в LinkedIn Instagram Facebook Twitter.

Получите доступ к экспертному обзору - Подпишитесь на DDI Intel