• 技术文章 >Java >java教程

    Java多线程是什么

    (*-*)浩(*-*)浩2020-10-13 10:18:36原创9007
    本篇文章将介绍一下多线程和其实例。

    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多线程是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:Java
    上一篇:java中的swing是什么 下一篇:JAVA为什么要用到事务
    大前端线上培训班

    相关文章推荐

    • java中组件是什么意思?• java反射机制有什么用?• Java怎么设置字体• java中的swing是什么

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网