Java多线程是什么

互联网 19-5-5
本篇文章将介绍一下多线程和其实例。

Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程 序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线 程来运行。

一般常见的Java应用程序都是单线程的。比如,用java命令运行一个最简单的HelloWorld的Java应用程序时,就启动了一个JVM进 程,JVM找到程序程序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称之为主线程。当main方法结束后,主线程运行完成。JVM进程也随即退出 。

对于一个进程中的多个线程来说,多个线程共享进程的内存块,当有新的线程产生的时候,操作系统不分配新的内存,而是让新线程共享原有的进程块的内存。因此,线程间的通信很容易,速度也很快。不同的进程因为处于不同的内存块,因此进程之间的通信相对困难。

推荐课程:Java教程

进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。

线程是指进程中的一个执行流程,一个进程可以运行多个线程。比如java.exe进程可以运行很多线程。线程总是输入某个进程,进程中的多个线程共享进程的内存。

多线程指的是这个程序(一个进程)运行时产生了不止一个线程

实例

线程1:接下来使用实现Runnable实现多线程的方法:。

public class TestRunnable implements Runnable {      private int time=1;     private SourceA s;     private String id = "001";     public TestRunnable(SourceA s){         this.s = s;     }     public void setTime(int time) {         this.time = time;     }          @Override     public void run() {         try {             System.out.println("i will sleep"+ time);             Thread.sleep(time);         } catch (InterruptedException e) {             e.printStackTrace();         }          synchronized(s){             s.notify();             System.out.println("我唤醒了002!");             System.out.println("我存入了id"+id);             s.setSource(id);         }     }  }

线程2:接下来使用继承Thread实现多线程的方法:。

public class TestThread extends Thread {     private int time = 1;     private SourceA s = null;     String id = "002";          public void setTime(int time) {         this.time = time;     }          public TestThread(SourceA s){         this.s = s ;     }          @Override     public void run() {         try {             System.out.println("i will sleep"+ time);             sleep(time);         } catch (InterruptedException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }                  synchronized(s){             try {                 System.out.println("我"+ id +"要进行等待了");                 s.wait();             } catch (InterruptedException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }             System.out.println("我被唤醒了");             System.out.println("我存入了id"+id);             s.setSource(id);         }     }  }
public class SourceA {     private List<String> list = new ArrayList<String>();     public synchronized void getSource(){         for(int i=0;i<list.size();i++){             System.out.println(list.get(i));         }     }     public synchronized void setSource(String id){         list.add(id);     } }
public void test(){         SourceA s = new SourceA();         TestThread tt = new TestThread(s);         TestRunnable tr = new TestRunnable(s);         Thread t = new Thread(tr);         System.out.println("调用线程1");         tt.start();         System.out.println("调用线程2");         t.start();     }

以上就是Java多线程是什么的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: java
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:java中的swing是什么

相关资讯