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); } } }
将线程进行同步的类,有get、set方法。
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多线程是什么的详细内容,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)