【JAVA与C#比较】线程

1.java中线程更多体现的是类的思想,所以可以通过继承Thread类,和实现Runnable接口来创建线程。使用继承Thread类的方法来创建线程类时,多个线程间无法共享线程类的实例变量。而C#更多体现的是委托的思想,通过将方法体作为参数构造线程类。

public class MyThread extends Thread{     //继承Thread类
  public void run(){
  //重写run线程方法
  }
}
public class MyThread2 implements Runnable {//实现Runnable接口
  public void run(){
  //重写run线程方法
  }
}
new MyThread().start();              //创建并启动线程MyThread
new Thread(new MyThread2()).start(); //创建爱你并启动线程MyThread2
public void ThreadSend()  
{  
   Thread.Sleep(1000);  //线程方法
}                  
new Thread(ThreadSend).Start();      //创建并启动线程ThreadSend   

2.java中线程的同步机制使用synchronized关键字,分为同步块、同步方法和同步锁三种方式,而C#中使用lock关键字,体现的是同步变量思想。
class compute extends Thread{  //同步块
  public void run(){
    synchronized(Object){      //Object为标志位,或者需要同步操作处理的变量
      print();
      ...//
    }
  } 
  public void print(){
    ...//
  }
}

class compute extends Thread{  //同步方法
  public void run(){
    print();
    ...//
  }
  synchronized void print(){
    ...//
  } 
}

public class compute{          //同步锁
  private final ReentrantLock lock = new ReentrantLock();
  public void print(){
    lock.lock();
    ...//
    lock.unlock();
  }
}

Object thisLock = new Object();
lock (thisLock)
{
    // Critical code section
}

3.java中线程间传递数据通过构造函数实现,C#中通过传递object对象后再转换为需要的类型实现。
class compute extends Thread{
  char ch;
  compute(char ch){
    this.ch=ch;
  }

  public void run(){
    ...//
  }
}
private void Compute(object parameter)
{
  char ch=(char)parameter;
}

4.Java8之后可以用Lambda表达式创建有返回值的线程,而C#可以直接将有返回值的函数作为参数,放到线程当中来实现。
FutureTask<Integer> task = new FutureTask<Integer>((Callable<Integer>)()->{
  int i = 0; 
  ...//
  return i;
})
new Thread(task,"有返回值的线程").start();
int value = task.get();  //获取线程返回值
Task<int> task = Task.Factory.StartNew<int>(() =>
{
    int i = 0;
    ...//
    return i;
});
int taskResult = task.Result;


猜你喜欢

转载自blog.csdn.net/u014650759/article/details/79394065