Java
46 subscribers
42 photos
36 files
137 links
Download Telegram
Interface in Java

Java Interface Example
در این مثال👇اینترفیس Printable یه متود داره که توسط کلاس A پیاده سازی میشه.
interface printable{
void print();
}
class A6 implements printable{
public void print(){
System.out.println("Hello");
}

public static void main(String args[]){
A6 obj = new A6();
obj.print();
}
}
--------------------------------------------
Output:
Hello


Java Interface Example: Drawable
در این مثال 👇اینترفیس Drawable فقط یه متود داره که توسط کلاس های Rectangle و Circle پیاده سازی شده.

در یک سناریو واقعی یه اینترفیس توسط یه نفر نوشته میشه و توسط دیگران به شکل های مختلفی پیاده سازی میشه.
File: TestInterface1.java
//Interface declaration: by first user  
interface Drawable{
void draw();
}
//Implementation: by second user
class Rectangle implements Drawable{
public void draw(){
System.out.println("drawing rectangle");
}
}
class Circle implements Drawable{
public void draw(){
System.out.println("drawing circle");
}
}
//Using interface: by third user
class TestInterface1{
public static void main(String args[]){
Drawable d=new Circle();
d.draw();
}
}
--------------------------------------------
Output:
drawing circle


Multiple inheritance in Java by interface
اگر یک کلاس چندتا interface رو پیاده سازی کنه یا یه interface چندتا interface دیگه رو extend کنه بهش میگیم multiple inheritance.


@java_me
@javach_me
@javadp_me
Multiple Inheritance in Java
Multithreading in Java


ترد کوچکترین واحد پردازش و مالتی تردین یک پروسه هست برای اجرای چندین ترد به صورت هم زمان هست.
از ویژگی های multithreading میشه به share بودن memory بین اونها اشاره کرد. تردها memory جداگونه ای نمیگیرن و زمان اجراشون خیلی سریع هست.

Advantages of Java Multithreading
۱- کاربر رو block یا معطل نمیگذاره.
۲- میتونیم چندین عملیات رو باهم انجام بدیم.
۳- همچنین تردها به هم وابسته نیستن.
۴- اگر یکی شون ارور بده، روی بقیه تاثیری نداره.
۵- همچنین share بودن memory بین اونها.

Life cycle of a Thread (Thread States)


لایف سایکل (life cycle) ترد در جاوا توسط JVM کنترل میشه.
۵ تا وضعیت برای ترد در جاوا وجود داره:
1- New
2- Runnable
3- Running
4- Non-Runnable (Blocked)
5- Terminated
وضعیت های thread در جاوا به این ترتیب هستن:

1- New
وضعیت یک ترد وقتی new هست که شما یک instance از کلاس Thread بسازید اما قبل از اینکه متود start رو صدا بزنید.
2- Runnable
وضعیت یک ترد وقتی runnable میشه که متود start صدا زده بشه اما thread scheduler هنوز اونو انتخاب نکرده.
3- Running
وضعیت یک ترد وقتی running میشه که thread scheduler اون رو انتخاب کرده باشه.
4- Non-Runnable (Blocked)
در این وضعیت ترد هنوز زنده هست اما قابل اجرا شدن نیست.
5- Terminated
در این وضعیت ترد متوقف شده یا مرده، در واقع از متود run خارج شده.
Creating Thread


دو راه برای ساخت یک ترد وجود داره:
۱- کلاس Thread رو extend کنیم.
۲- اینترفیس Runnable رو implement کنیم.

Thread class:
کلاس Thread یه سری کانستراکتور و متود داره که میشه باهاشون کارهایی رو روی thread ساخت و انجام داد. خود کلاس Thread ، اینترفیس Runnable رو پیاده سازی کرده.

کانستراکتورهایی که به طور معمول در کلاس Thread استفاده میشه:
1- Thread()
2- Thread(String name)
3- Thread(Runnable r)
4- Thread(Runnable r, String name)


متودهایی که به طور معمول در کلاس Thread استفاده میشه:
1- public void run()
2- public void start()
3- public void sleep(long miliseconds)
4- public void join()
5- public void join(long miliseconds)
6- public int getPriority()
7- public int setPriority(int priority)
8- public String getName()
9- public void setName(String name)
10- public Thread currentThread()
11- public int getId()
12- public Thread.State getState()
13- public boolean isAlive()
14- public void yield()
15- public void suspend()
16- public void resume()
17- public void stop()
18- public boolean isDaemon()
19- public void setDaemon(boolean b)
20- public void interrupt()
21- public boolean isInterrupted()
22- public static boolean interrupted()

۱- برای انجام عملیات توسط thread استفاده میشه.
۲- برای اجرا کردن ترد از این متود استفاده میشه.
۳- باعث میشه تا ترد جاری که در حال اجرا هست برای لحظاتی متوقف بشه.
۴- ؟
۵- ؟
۶- اولویت ترد رو برمی گردونه.
۷- اولویت ترد رو عوض میکنه.
۸- نام thread رو برمی گردونه.
۹- نام ترد رو عوض میکنه.
۱۰- تردی که در حال اجرا هست رو برمی گردونه.
۱۱- آی دی ترد رو برمی گردونه.
۱۲- وضعیت ترد رو برمی گردونه.
۱۳- مشخص میکنه که ترد هنوز زنده ست یا نه.
۱۴- باعث میشه تا تردی که در حال اجرا هست، به صورت موقت متوقف بشه تا بقیه تردها اجرا بشن.
۱۵- برای به تعلیق (suspend) در اوردن ترد استفاده میشه.
۱۶- برای به اجرا در اوردن ترد تعلیق (suspend) شده استفاده میشه.
۱۷- برای stop کردن ترد استفاده میشه.
۱۸- ؟
۱۹- ؟
۲۰- ترد رو قطع میکنه.
۲۱- مشخص میکنه که آیا ترد قطع (interrupted) شده یا نه.
۲۲- مشخص میکنه که آیا ترد جاری قطع (interrupted) شده یا نه.

Runnable interface:
این اینترفیس باید توسط هر کلاسی که میخواد کدی رو توی ترد اجرا کنه، پیاده سازی بشه. این interface فقط یک متود run داره
1- public void run()

۱- برای انجام عملیات توسط thread استفاده میشه.

Starting a thread:
متود start در کلاس Thread برای استارت شدن تردی هست که new شده و این وظایف رو انجام میده: ۱- استارت شدن ترد جدید. ۲- وضعیت ترد runnable میشه. ۳- وقتی یک ترد برای اجرا آماده میشه، هدفش اجرا کردن متود run هست.

1) Java Thread Example by extending Thread class
class Multi extends Thread{  
public void run(){
System.out.println("thread is running...");
}
public static void main(String args[]){
Multi t1=new Multi();
t1.start();
}
}
--------------------------------------------
Output:
thread is running...


2) Java Thread Example by implementing Runnable interface
class Multi3 implements Runnable{  
public void run(){
System.out.println("thread is running...");
}

public static void main(String args[]){
Multi3 m1 =new Multi3();
Thread t1 =new Thread(m1);
t1.start();
}
}
--------------------------------------------
Output:
thread is running...

در این مثال☝️ما کلاس Thread رو extend نکردیم. بخاطر همین نیاز هست تا یه instance از کلاس Thread بسازیم و onject کلاسی رو که Runnable رو پیاده سازی کرده بهش بدیم تا بتونه از این طریق متود run رو اجرا کنه
Sleeping a thread


متود sleep از کلاس Thread، برای متوقف کردن ترد برای یه مدت زمان خاص استفاده میشه.

Example of sleep method in java
class TestSleepMethod1 extends Thread{  
public void run(){
for(int i=1;i<5;i++){
try{
Thread.sleep(500);
}catch(InterruptedException e){
System.out.println(e);
}
System.out.println(i);
}
}
public static void main(String args[]){
TestSleepMethod1 t1=new TestSleepMethod1();
TestSleepMethod1 t2=new TestSleepMethod1();
t1.start();
t2.start();
}
}
--------------------------------------------
Output:
1
1
2
2
3
3
4
4

همین طور که میدونید در یک لحظه فقط یک ترد اجرا میشه. بخاطر همین وقتی در این مثال☝️یک ترد برای یه مدت زمانی به حالت sleep میره، thread shedular یه thread دیگه رو اجرا میکنه و الاآخر.
Start a thread twice


بعد از start کردن یک thread، اون دیگه نمیتونه دوباره start بشه. اگر همچین کاری انجام بدید یه IllegalThreadStateException پرتاب (throw) میشه.
به مثال زیر 👇توجه کنید.
public class TestThreadTwice1 extends Thread{  
public void run(){
System.out.println("running...");
}
public static void main(String args[]){
TestThreadTwice1 t1=new TestThreadTwice1();
t1.start();
t1.start();
}
}
--------------------------------------------
Output:
running
Exception in thread "main" java.lang.IllegalThreadStateException
Java Socket Programming


جاوا سوکت programming برای ارتباط بین برنامه هایی که در JRE های متفاوت اجرا میشن، بکار برده میشه.
هم میتونه connection-oriented هم میتونه connection-less باشه.

از کلاس های Socket و ServerSocket برای connection-oriented و از کلاس های DatagramSocket و DatagramPacket برای connection-less استفاده میشه.

کلاینت در سوکت programming باید دوتا چیز رو بدونه:
۱- آی پی سرور
۲- شماره پورت (port number)

Socket class
این کلاس برای ساخت socket client استفاده میشه، و ۳ متود مهم داره:
1- public InputStream getInputStream()
2- public OutputStream getOutputStream()
3- public synchronized void close()
۱- از سوکت، InputStream رو برای ورود اطلاعات میگیره.
۲- از سوکت، OutputStream رو برای خروجی اطلاعات میگیره.
۳- سوکت رو می بنده.

ServerSocket class
این کلاس برای ساخت socket server استفاده میشه که با کلاینت ها در ارتباط هست، و دوتا متود مهم داره:
1- public Socket accept()
2- public synchronized void close()
۱- یه سوکت برمی گردونه و یه ارتباط بین سرور و کلاینت برقرار میکنه.
۲- سوکت سرور رو می بنده.

Example of Java Socket Programming
در این مثال👇با استفاده از socket programming یه پیام از کلاینت ارسال میشه و سرور اونو دریافت میکنه.
File: MyServer.java
import java.io.*;  
import java.net.*;
public class MyServer {
public static void main(String[] args){
try{
ServerSocket ss=new ServerSocket(6666);
Socket s=ss.accept();
DataInputStream dis=new DataInputStream(s.getInputStream());
String str=(String)dis.readUTF();
System.out.println("message= "+str);
ss.close();
}catch(Exception e){
System.out.println(e);
}
}
}


File: MyClient.java
import java.io.*;  
import java.net.*;
public class MyClient {
public static void main(String[] args) {
try{
Socket s=new Socket("localhost",6666);
DataOutputStream dout=new DataOutputStream(s.getOutputStream());
dout.writeUTF("Hello Server");
dout.flush();
dout.close();
s.close();
}catch(Exception e){
System.out.println(e);
}
}
}

برای اجرا کردن این مثال☝️هر فایل (برنامه) رو به صورت جداگانه اجرا کنید.

Example of Java Socket Programming (Read-Write both side)
در این مثال👇ابتدا کلاینت، یه متنی رو برای سرور می فرسته. وقتی سرور متن رو دریافت میکنه، اونو پرینت میکنه. سپس سرور یه متنی رو برای کلاینت می فرسته و کلاینت پس از دریافت، اونو پرینت میکنه.
File: MyServer.java
import java.net.*;  
import java.io.*;
class MyServer{
public static void main(String args[])throws Exception{
ServerSocket ss=new ServerSocket(3333);
Socket s=ss.accept();
DataInputStream din=new DataInputStream(s.getInputStream());
DataOutputStream dout=new DataOutputStream(s.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

String str="",str2="";
while(!str.equals("stop")){
str=din.readUTF();
System.out.println("client says: "+str);
str2=br.readLine();
dout.writeUTF(str2);
dout.flush();
}

din.close();
s.close();
ss.close();
}
}


File: MyClient.java
import java.net.*;  
import java.io.*;
class MyClient{
public static void main(String args[])throws Exception{
Socket s=new Socket("localhost",3333);
DataInputStream din=new DataInputStream(s.getInputStream());
DataOutputStream dout=new DataOutputStream(s.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

String str="",str2="";
while(!str.equals("stop")){
str=br.readLine();
dout.writeUTF(str);
dout.flush();
str2=din.readUTF();
System.out.println("Server says: "+str2);
}

dout.close();
s.close();
}
}
history-of-java.png
167.8 KB
JλVλ (A Comprehensive Look)