Rumah Java javaTutorial Java之线程(匿名内部类)

Java之线程(匿名内部类)

Dec 15, 2016 pm 01:07 PM
kelas dalaman tanpa nama

1 Thread对象 

Java代码 

Thread t = new Thread(  
                new Thread(){  
                    @Override  
                    public void run() {  
                      
                        while(true){  
                            try {  
                                Thread.sleep(1000);  
                            } catch (InterruptedException e) {  
                                e.printStackTrace();  
                            }  
                            System.out.println("1: "+Thread.currentThread().getName());  
                            System.out.println("2: "+this.getName());  
                        }                         
                          
                    }  
                }  
        );  
        t.start();
Salin selepas log masuk

2 Runnable接口

Java代码

Thread t2 = new Thread(  
                new Runnable(){  
                    @Override  
                    public void run() {  
                          
                        while(true){  
                            try {  
                                Thread.sleep(1000);  
                            } catch (InterruptedException e) {  
                                e.printStackTrace();  
                            }  
                            System.out.println("3: "+Thread.currentThread().getName());                           
                        }                         
                    }  
                }  
        );  
        t2.start();
Salin selepas log masuk

下面会执行哪部分代码呢!

Java代码

//只要重写了run方法,你从构造函数传递进去的线程对象就不会在执行        
        new Thread(new Runnable(){  
              
            @Override  
            public void run() {  
                  
                while(true){  
                    try {  
                        Thread.sleep(1000);  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                    System.out.println("runnable: "+Thread.currentThread().getName());                            
                }                         
            }  
        }  
        ){  
              
            @Override  
            public void run() {  
                  
                while(true){  
                    try {  
                        Thread.sleep(1000);  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                    System.out.println("thread: "+Thread.currentThread().getName());                              
                }  
                  
            }  
        }.start();
Salin selepas log masuk

输出结果如下:

Log代码

3: Thread-2  
1: Thread-1  
2: Thread-0  
thread: Thread-3
Salin selepas log masuk

以下代码来自于:JAVA编程思想第四版,说明加了是否加线程的区别!
Counter1 .java没有加线程的表现!

Java代码

import java.awt.*;  
import java.awt.event.*;  
import java.applet.*;  
  
public class Counter1 extends Applet {    
      
    private static final long serialVersionUID = 1L;  
    private int count = 0;  
    private Button onOff = new Button("Toggle"), start = new Button("Start");  
    private TextField t = new TextField(10);  
    private boolean runFlag = true;  
  
    public void init() {  
        add(t);  
        start.addActionListener(new StartL());  
        add(start);  
        onOff.addActionListener(new OnOffL());  
        add(onOff);  
    }  
  
    @SuppressWarnings("static-access")  
    public void go() {  
        while (true) {  
            try {  
                Thread.currentThread().sleep(100);  
            } catch (InterruptedException e) {  
            }  
            if (runFlag)  
                t.setText(Integer.toString(count++));  
  
        }  
    }  
  
    class StartL implements ActionListener {  
        public void actionPerformed(ActionEvent e) {  
            go();  
        }  
    }  
  
    class OnOffL implements ActionListener {  
        public void actionPerformed(ActionEvent e) {  
            runFlag = !runFlag;  
        }  
    }  
  
    public static void main(String[] args) {  
        Counter1 applet = new Counter1();  
        Frame aFrame = new Frame("Counter1");  
        aFrame.addWindowListener(new WindowAdapter() {  
            public void windowClosing(WindowEvent e) {  
                System.exit(0);  
            }  
        });  
        aFrame.add(applet, BorderLayout.CENTER);  
        aFrame.setSize(300, 200);  
        applet.init();  
        applet.start();  
        aFrame.setVisible(true);  
    }  
}
Salin selepas log masuk

Counter2i.java加了线程结果大不一样了,加了个内部类,它继承了Thread

Java代码

import java.awt.*;  
import java.awt.event.*;  
import java.applet.*;  
  
public class Counter2i extends Applet {  
      
    private static final long serialVersionUID = 1L;  
  
    private class SeparateSubTask extends Thread {  
        int count = 0;  
        boolean runFlag = true;  
  
        SeparateSubTask() {  
            start();  
        }  
  
        public void run() {  
            while (true) {  
                try {  
                    sleep(100);  
                } catch (InterruptedException e) {  
                }  
                if (runFlag)  
                    t.setText(Integer.toString(count++));  
            }  
        }  
    }  
  
    private SeparateSubTask sp = null;  
    private TextField t = new TextField(10);  
    private Button onOff = new Button("Toggle"), start = new Button("Start");  
  
    public void init() {  
  
        add(t);  
        start.addActionListener(new StartL());  
        add(start);  
        onOff.addActionListener(new OnOffL());  
        add(onOff);  
    }  
  
    class StartL implements ActionListener {  
        public void actionPerformed(ActionEvent e) {  
            if (sp == null)  
                sp = new SeparateSubTask();  
        }  
    }  
  
    class OnOffL implements ActionListener {  
        public void actionPerformed(ActionEvent e) {  
            if (sp != null)  
                sp.runFlag = !sp.runFlag; // invertFlag();  
        }  
    }  
  
    public static void main(String[] args) {  
        Counter2i applet = new Counter2i();  
        Frame aFrame = new Frame("Counter2i");  
        aFrame.addWindowListener(new WindowAdapter() {  
            public void windowClosing(WindowEvent e) {  
                System.exit(0);  
            }  
        });  
        aFrame.add(applet, BorderLayout.CENTER);  
        aFrame.setSize(300, 200);  
        applet.init();  
        applet.start();  
        aFrame.setVisible(true);  
    }  
}
Salin selepas log masuk

Counter3.java它实现了Runnable接口

Java代码

import java.awt.*;  
import java.awt.event.*;  
import java.applet.*;  
  
public class Counter3 extends Applet implements Runnable {  
      
    private static final long serialVersionUID = 1L;  
    private int count = 0;  
    private boolean runFlag = true;  
    private Thread selfThread = null;  
    private Button onOff = new Button("Toggle"), start = new Button("Start");  
    private TextField t = new TextField(10);  
  
    public void init() {  
        add(t);  
        start.addActionListener(new StartL());  
        add(start);  
        onOff.addActionListener(new OnOffL());  
        add(onOff);  
    }  
  
    @SuppressWarnings("static-access")  
    public void run() {  
        while (true) {  
            try {  
                selfThread.sleep(100);  
            } catch (InterruptedException e) {  
            }  
            if (runFlag)  
                t.setText(Integer.toString(count++));  
        }  
    }  
  
    class StartL implements ActionListener {  
        public void actionPerformed(ActionEvent e) {  
            if (selfThread == null) {  
                selfThread = new Thread(Counter3.this);  
                selfThread.start();  
            }  
        }  
    }  
  
    class OnOffL implements ActionListener {  
        public void actionPerformed(ActionEvent e) {  
            runFlag = !runFlag;  
        }  
    }  
  
    public static void main(String[] args) {  
        Counter3 applet = new Counter3();  
        Frame aFrame = new Frame("Counter3");  
        aFrame.addWindowListener(new WindowAdapter() {  
            public void windowClosing(WindowEvent e) {  
                System.exit(0);  
            }  
        });  
        aFrame.add(applet, BorderLayout.CENTER);  
        aFrame.setSize(300, 200);  
        applet.init();  
        applet.start();  
        aFrame.setVisible(true);  
    }  
}
Salin selepas log masuk



更多Java之线程(匿名内部类)相关文章请关注PHP中文网!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimanakah kelas dalaman tanpa nama Java menyelesaikan masalah kebocoran memori? Bagaimanakah kelas dalaman tanpa nama Java menyelesaikan masalah kebocoran memori? May 01, 2024 pm 10:30 PM

Bagaimanakah kelas dalaman tanpa nama Java menyelesaikan masalah kebocoran memori?

Apakah corak reka bentuk untuk kelas dalaman tanpa nama di Jawa? Apakah corak reka bentuk untuk kelas dalaman tanpa nama di Jawa? May 02, 2024 pm 04:42 PM

Apakah corak reka bentuk untuk kelas dalaman tanpa nama di Jawa?

Apakah kelebihan kelas dalaman tanpa nama di Jawa? Apakah kelebihan kelas dalaman tanpa nama di Jawa? Apr 30, 2024 am 11:39 AM

Apakah kelebihan kelas dalaman tanpa nama di Jawa?

Apakah kitaran hayat kelas dalaman tanpa nama Java? Apakah kitaran hayat kelas dalaman tanpa nama Java? May 01, 2024 pm 04:06 PM

Apakah kitaran hayat kelas dalaman tanpa nama Java?

Apakah kesilapan biasa dengan kelas dalaman tanpa nama di Jawa? Apakah kesilapan biasa dengan kelas dalaman tanpa nama di Jawa? May 02, 2024 am 09:03 AM

Apakah kesilapan biasa dengan kelas dalaman tanpa nama di Jawa?

Bagaimana untuk mengoptimumkan prestasi kelas dalaman tanpa nama Java? Bagaimana untuk mengoptimumkan prestasi kelas dalaman tanpa nama Java? May 02, 2024 am 08:48 AM

Bagaimana untuk mengoptimumkan prestasi kelas dalaman tanpa nama Java?

Apakah alternatif kepada kelas dalaman tanpa nama di Jawa? Apakah alternatif kepada kelas dalaman tanpa nama di Jawa? Apr 30, 2024 pm 01:15 PM

Apakah alternatif kepada kelas dalaman tanpa nama di Jawa?

Dalam senario apakah kelas dalaman tanpa nama Java tidak sesuai untuk digunakan? Dalam senario apakah kelas dalaman tanpa nama Java tidak sesuai untuk digunakan? May 03, 2024 pm 05:42 PM

Dalam senario apakah kelas dalaman tanpa nama Java tidak sesuai untuk digunakan?

See all articles