java多线程是什么_Java多线程是什么

本篇文章将介绍一下多线程和其实例。

bab56069b4094ac3358c6a4e309e80cb.png

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

一般常见的Java应用程序都是单线程的。比如,用java命令运行一个最简单的HelloWorld的Java应用程序时,就启动了一个JVM进

程,JVM找到程序程序的入口点main(),然后运行main()方法,这样就产生了一个线程,这个线程称之为主线程。当main方法结束后,主线程运行完成。JVM进程也随即退出 。

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

进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在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 list = new ArrayList();

public synchronized void getSource(){

for(int i=0;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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值