zoukankan      html  css  js  c++  java
  • Thread学习笔记

    /*
     * 常见的创建线程的方法有两种:
     * 1.扩展java.lang.Thread类
     * 2.事项java.lang.Runnable接口
     * 
     * 第一种方法需要覆盖run方法,并在run方法中写入想在这个线程中想要执行的代码,一个线程创建之后需要使用start方法启动这个线程
     * 当run()方法返回或者抛出异常的时候,线程会死掉并且被垃圾收集。
     * 每一个线程都有自己的一个名字,这是常用的方法。而且每个线程都有自己的状态,new,runnable,blocked,waiting,
     * time_waiting,terminated
     * 线程的状态封装在java.lang.Thread.State这个枚举类型中。
     * */
    
    
    public class ThreadDemo extends Thread {
        public void run()
        {
            for(int i=0;i<=10;i++)
            {
                System.out.println(i);
            }
            try{
                sleep(1000);
            }catch(InterruptedException e){}
        }
        public static void main(String[] args)
        {
            new ThreadDemo().start();
        }
    }

    因为我们不能总是从主类来扩展Thread类,因为java不是指出多继承的,这样就需要我们重新写一个类继承Thread,这样在主函数中直接调用就可以了。

    类似的,我们可以使用Runnable类接口来实现一个线程。


    class
    MyThread extends Thread { public void run() { for(int i=0;i<=10;i++) { System.out.println(i); try{ sleep(1000); }catch(InterruptedException e){} } } } public class ThreadDemo { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); } }

    class MyThread implements Runnable
    {
        public void run()
        {
            for(int i=0;i<10;i++)
            {
                System.out.println(i);
                try{  Thread.sleep(1000); } catch(InterruptedException e){}
            }
            
            //这里需用调用一个静态方法,方法返回当前正在执行的线程,然后调用这个线程的sleep()方法。
        }
    }
    public class ThreadDemo
    {
        public static void main(String[] args)
        {
            MyThread myThread = new MyThread();
            Thread thread = new Thread(myThread);
            thread.start();
        }
    }
    //使用了一个多线程
    import
    java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel; public class ThreadDemo extends JFrame { JLabel countUpLabel = new JLabel("Count Up"); JLabel countDownLabel = new JLabel("Count Down"); class CountUpThread extends Thread { public void run() { int count = 1000; while(true) { try{ sleep(1000);} catch(InterruptedException e){} if(count==0) count=1000; countUpLabel.setText(Integer.toString(count--)); } } } class CountDownThread extends Thread { public void run() { int count=0; while(true) { try{ sleep(50); }catch(InterruptedException e){} if(count==1000) count = 0; countDownLabel.setText(Integer.toString(count++)); } } } public ThreadDemo(String title) { super(title); init(); } private void init() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.getContentPane().setLayout(new FlowLayout()); this.add(countUpLabel); this.add(countDownLabel); this.pack(); this.setVisible(true); new CountUpThread().start(); new CountDownThread().start(); } private static void constructGUI() { JFrame.setDefaultLookAndFeelDecorated(true); ThreadDemo frame = new ThreadDemo("ThreadDemo"); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable(){ public void run() { constructGUI(); } }); } }
  • 相关阅读:
    SVN 、Git、Github的使用
    asp.net core 系列 8 Razor框架路由(下)
    asp.net core 系列 7 Razor框架路由(上)
    asp.net core 系列 6 MVC框架路由(下)
    asp.net core 系列 5 MVC框架路由(上)
    asp.net core 系列 4 注入服务的生存期
    asp.net core 系列 3 依赖注入服务
    asp.net core 系列 2 启动Startup类介绍
    asp.net core 系列 1 概述
    iframe和response.sendRedirect()跳转到父页面的问题
  • 原文地址:https://www.cnblogs.com/zuimeiyujianni/p/8711895.html
Copyright © 2011-2022 走看看