在Java中线程有四种状态:运行,就绪,挂起和结束。
进程:是指一段正在执行得程序。而进程有时也被称为轻量级进程,它是程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段,数据段和堆空间)及一些进程级的资源(例如打开的文件),但是各个线程拥有自己的栈空间。
多线程的利:
1>使用多线程可以减少程序的响应时间。
2>与进程相比,线程的创建和切换开销更小。
3>多CPU或多核计算机本身就具有执行多线程的能力,如果使用单个线程,将无法重复利用计算机资源,造成资源的巨大浪费。
4>使用多线程能简化程序的结构,是程序便于理解和维护。
同步和异步的区别:
同步就是许多线程同时用一个资源啥的哦,一个在用别的就要等,异步就相反了,可以不用等待
下面这是人家的话:
同步:发送一个请求,等待返回,然后再发送下一个请求
异步:发送一个请求,不等待返回,随时可以再发送下一个请求
同步可以避免出现死锁,读脏数据的发生,一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会按顺序来修改。
异步则是可以提高效率了,现在cpu都是双核,四核,异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的。
这些都是对的。
同步和异步最大的区别就在于。一个需要等待,一个不需要等待。
比如广播,就是一个异步例子。发起者不关心接收者的状态。不需要等待接收者的返回信息
电话,就是一个同步例子。发起者需要等待接收者,接通电话后,通信才开始。需要等待接收者的返回信息。
实现多线程:
1>继承Thread类,重写run()方法:
public void run(){
System.out.println(“Thread body”);
}
public class test18 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread thread =new Thread();
thread.start();
}
}
2>实现Runnable接口,并实现该接口的run()方法:
步骤:
1.自定义类并实现Runnable接口,实现run()方法
2.创建Thread对象,用实现Runnable接口的对象作为参数实例化该Thread对象。
3.调用Thread的start()方法。
class MyThread implements Runnable{//创建线程类
public void run(){
System.out.println(“Thread body”);
}
}
public class test18{
public static void main(String args[]){
MyThread thread=new MyThread();
Thread t=new Thread(thread);
t.start();//开启线程
}
}
3>实现Callable接口,重写call()方法:
Callable与Runnable对比:
1.Callable可以在任务结束之后提供一个返回值,Runnable无法提供这一功能。
2.Callable中的call()方法可以抛出异常,而Runnable的run()方法不能抛出异常。
3.运行Callable可以拿到一个Future对象,Future对象表示异步计算的结果,他提供了检查计算是否完成的方法。由于线程属于异步计算模型,因此无法从别的线程中得到函数的返回值,在这种情况下,就可以使用Feture来监视目标线程调用call()方法的情况,当调用Future的get()方法以获取结果时,当前线程就会阻塞,直到call()方法结束返回结果。
public class CallableAndFeture{
public static class CallableTest implements Callable{
public String call()throws Exception{
return “Hello World!”;
}
}
public static void main(String args[]){
ExecutorService threadPol=Executors.newSingleThreadExecutor();
Future future=threadPol.submit(new CallableTest());
try{
System.out.println(“waiting thread to finshed”);
System.out.println(future.get());
}catch (Exception e){
e.printStackTrace();
}
}
}