• java 多线程学*笔记


    首先声明这个是粘过来的,是担心链接有一天会失效。。。原链接如下

    http://developer.51cto.com/art/200911/162925.htm

    http://developer.51cto.com/art/200906/132337.htm

    在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。任何一个Java程序都必须有一个主线程。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例

    用Thread类创建线程

    thread类的构造方法有8种

    public Thread( );  

    public Thread(Runnable target);  

    public Thread(String name);  

    public Thread(Runnable target, String name);  

    public Thread(ThreadGroup group, Runnable target);  

    public Thread(ThreadGroup group, String name);  

    public Thread(ThreadGroup group, Runnable target, String name);  

    public Thread(ThreadGroup group, Runnable target, String name, long stackSize); 

    Runnable target

    实现了Runnable接口的类的实例。要注意的是Thread类也实现了Runnable接口,因此,从Thread类继承的类的实例也可以作为target传入这个构造方法。

    String name

    线程的名子。这个名子可以在建立Thread实例后通过Thread类的setName方法设置。如果不设置线程的名子,线程就使用默认的线程名:Thread-N,N是线程建立的顺序,是一个不重复的正整数。

    ThreadGroup group

    当前建立的线程所属的线程组。如果不指定线程组,所有的线程都被加到一个默认的线程组中。关于线程组的细节将在后面的章节详细讨论。

    long stackSize

    线程栈的大小,这个值一般是CPU页面的整数倍。如x86的页面大小是4KB。在x86平台下,默认的线程栈大小是12KB。

    一个普通的Java类只要从Thread类继承,就可以成为一个线程类。并可通过Thread类的start方法来执行线程代码。虽然Thread类的子类可以直接实例化,但在子类中必须要覆盖Thread类的run方法才能真正运行线程的代码

    在调用start方法前后都可以使用setName设置线程名,但在调用start方法后使用setName修改线程名,会产生不确定性,也就是说可能在run方法执行完后才会执行setName。如果在run方法中要使用线程名,就会出现虽然调用了setName方法,但线程名却未修改的现象

    Thread类的start方法不能多次调用,如不能调用两次thread1.start()方法。否则会抛出一个IllegalThreadStateException异常。

    使用Runnable接口创建线程

    实现Runnable接口的类必须使用Thread类的实例才能创建线程。通过Runnable接口创建线程分为两步:

    1. 将实现Runnable接口的类实例化。

    2.     建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法。

    最后通过Thread类的start方法建立线程。

    下面的代码演示了如何使用Runnable接口来创建线程:

    package mythread;  

    public class MyRunnable implements Runnable  

    {  

       public void run()   {  

        System.out.println(Thread.currentThread().getName());  

       }  

      public static void main(String[] args)   {  

        MyRunnable t1 = new MyRunnable();  

        MyRunnable t2 = new MyRunnable();  

        Thread thread1 = new Thread(t1, "MyThread1");  

        Thread thread2 = new Thread(t2);  

        thread2.setName("MyThread2");  

        thread1.start();  

        thread2.start();  

       }

    }  

    上面代码的运行结果如下:

    MyThread1
    MyThread2

    距离Java多线程的学*又更*一步了。

  • 相关阅读:
    所有程序员都是自学成才
    Xcode6模拟器路径
    Xcode7中模拟器的位置
    数据结构中的二级指针和引用
    02_线性表的链式表示和实现
    Spring 单例 httprequest 线程安全
    Springboot listener
    Spring单例 和 Scope注解
    红黑树
    线程池
  • 原文地址:https://www.cnblogs.com/wangfantasy/p/3437962.html
Copyright © 2020-2023  润新知