JAVA програмчлал
-76-
С.Ууганбаяр
System.ont.println(“After changingname”);
System.ont.println(“Current Thread : ” + t);
System.ont.println(“Name : ” + t.get Name ());
System.ont.println(“ ”);
System.ont.println(“This thread first 10 numbers ”);
Try {
For (int I =1; I < = 10; I ++) {
System.ont.print (i);
Thread.sleep (1000);
}
} catch (Interrupted exception e) { }
}
}
6.2.2 Thread классаас удамшуулж thread үүсгэх
Thread үүсгэх эхний арга бол Thread классын sub классыг үүсгэх. Энэ класс нь
run() методыг дарж тодорхойлох ёстой, мөн бусад методуудыг бас дарж болно.
Дараа нь уг классын объектыг үүсгэж болно. Энэ алхмуудыг доорхи зурагт
харуулав.
h тооны тэмдэгт мөр хэвлэдэг thread үүсгэх програмын жишээг авъя. Энэ
програм Thread классыг өргөтгөж thread үүсгэсэн.
Class PrintString 1 {
Public Static void main (String args [ ] ) {
String Thread1 t = new StringThread 1 (“Java”, 50);
t.Start ();
}
}
classes StringThread1 extends Thread {
private String str;
private int num;
StringThread1 (String s, int n ) {
Str = new String (s);
Class My Thread extends Thread
{
My Thread ( ) {
……..
……..
}
public void run () {
…..
…..
}
…..
}
Class Example
tic void main () {
My Thread t=new My Thread ();
….
t ();
……
}
}
{
public sta
t.Star
77.
JAVA програмчлал
Num =n ;
}
public void run () {
for (int I = 1; I c = num; I++)
system.ont.print(str+” ”);
}
}
6.2.3 Runnable интерфэйсийг хэрэгжүүлж thread үүсгэх
Өмнө хэлснээр, thread нь Runnable интерфэйсийг хэмэргжүүлснээр мөн үүсч
болно. Эндээс эдгээр аргуудын алийг нь thread үүсгэхэд ашиглах вэ? гэсэн
асуулт гарна. Хэрэв таны үүсгэж байгаа thread класс бусад классын sub класс
бол энэ нь thread классаас удамшиж чадахгүй. Учир нь Java нэгээс дээш
классаас удамшихыг зөвшөөрдөггүй. Ийм үед Runnable интерфэйсийг
ашигладаг.
Өмнөх програмыг Runnable интерфэйсийг ашигласан байдлаар өөрчилье.
Class PrintString 2 {
Public Static void main (String args [ ] ) {
String Thread 2 t = new StringThread (“Java”, 50);
New Thread (+).Start ();
}
}
classes StringThread 2 implements Runnable {
private String str;
private int num;
StringThread 2 (String s, int num ) {
Str = new String (s);
Num = n ;
}
public void run () {
for (int I = 1; I c = num; I++)
system.ont.print(str+” ”);
}
}
Өмнөх болон энэ програмын хоорондох ялгаа бол Thread классаас удамшуулан
thread үүсгэх үед шууд t.Start () гэж байсан. Учир нь String Thread1 бол Thread
классын sub класс, тиймээс тэр thread-н бүх боломжуудыг агуулсан байна.
Runnable –г ашиглан thread үүсгэх үед Thread объект PrintString2 классынхтай
адилаар ил үүсгэгдэнэ. Дараа нь String thread 2 объктыг түүнд параметр болгон
дамжуулж ажиллуулна. Энэ нь String Thread 2 классын run() методыг
ажиллуулахын тулд хийж байгаа хэрэг.
Мөн дээрхи програм Runnable интерфэйсийг хэрэгжүүлэн, мөн StringThread 3
классын дотор Thread объектыг үүсгэж өөрчлөгдөн бичигддэг.
Class PrintString 3 {
Public Static void main (String args [ ] ) {
-77-
С.Ууганбаяр
78.
JAVA програмчлал
New stringThread 3 (“Java”, 50);
}
}
class StringThread 3 implement Runnable {
private String str;
private int num;
StringThread3 (String s, int n ) {
Str = new String (s);
Num = n
Thread t =new Thread (this);
T. start();
}
public void run () {
for (int I = 1; I c = num; I++)
system.ont.print(str+” ”);
}
}
6.2.4 Олон thread үүсгэх, удирдах
3 thread үүсгэе- нэг нь “Java”-г 100 удаа хэвлэдэг, нөгөө нь “Cafe”-г 100 удаа
хэвлэдэг, гурав дахь нь 150-с баг а анхны тоо хэвлэдэг.
Class MultiThread {
Public Static void main (String args [ ] ) {
new Thread(new StringThread (“Java”,100)).Start ();
new Thread(new StringThread (“Cafe”,100)).Start ();
new Thread(new PrimeThread (150)).Start ();
}
}
classPrimeThread inylementsRunnable {
private int Castval;
primeThread ( int n ) {
Castval= n;
}
public void run () {
int I, j;
booloon flag;
for (I=2; I<= n; I++) {
flag = false ;
for ( j2; j<=i/2; j++)
if (i%j==0)
flag=true;
if (flag==false)
system.ont.print (it+” ”);
}
}
-78-
С.Ууганбаяр
79.
JAVA програмчлал
}
class StringThread implements Runnable {
private string str;
private int num;
stringThread (String s, int n) {
str = new String (s);
num = n;
}
public void run () {
for (int i=1; i<=num; i++)
System.ont.print (str+ “ “);
}
}
}
6.3 Thread-н зэрэглэл
Thread класс нь MIN_PRIORITY. NORM_PRIORITY, MAX_PRIORITY утгуудыг
тодорхойлсон байдаг бөгөөд тус бүр нь харгалзан 1,5,10 утгууд авдаг. Thread
default-оороо NORM_PRIORITY-тэй байдаг.
Java нь доогуур зэрэглэлтэй thread –ээс өндөр зэрэглэлтэй thread-г дээгүүр
тавьдаг. Хэрэв 2 буюу түүнээс дээш thread-ууд ижил зэрэглэлтэй бол CPU нь
тэдэнд round-robin маягаар хувиарлагддаг. Бид StringThread классын жишээг
үзсэн. Одоо 4 thread үүсгээд тэдэнд 5,6,7,8 зэрэглэлүүдийг харгалзан тогтоож
яаж ажиллахыг харъя.
Import String Thread;
Class PriorityThread {
Public static void main (String args [ ] ) {
Thread t 1=new Thread (new String Thread (“Java”, 25));
Thread t 2=new Thread (new String Thread (“Cafe”, 25));
Thread t 3=new Thread (new String Thread (“Symantic”, 25));
Thread t 4=new Thread (new String Thread (“Platform2”, 25));
t1.setPriority (Thread.NORM_PRIORITY);
t1.setPriority (Thread.NORM_PRIORITY +1);
t1.setPriority (Thread.NORM_PRIORITY+2);
t1.setPriority (Thread.NORM_PRIORITY+3);
t1.start ();
t 2.start ();
t3.start ();
t4.start ();
}
}
Thread-үүд бүгд 25 удаа тэмдэгт мөр хэвлэнэ. “Pleatform 2” –г хэвлэж байгаа
thread өндөр зэрэглэлтэй болохоор хамгийн эрт дуусна, г.м
-79-
С.Ууганбаяр