zoukankan      html  css  js  c++  java
  • 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多线程的学*又更*一步了。

  • 相关阅读:
    springMVC web项目转springboot web项目的杂谈
    testNG的DataProvider返回Iterator<Object[]>的妙用
    java+testng利用json格式的txt做数据源的数据驱动示例
    搭建rest-assured接口自动化框架遇到的坑
    Linux SAR命令详解
    springboot集成jsp需添加的包依赖
    springboot集成jsp,页面跳转问题记录
    Spring Boot 使用JSP时,启动热部署配置
    性能测试大牛推荐的必读书单
    ARP详解(转)
  • 原文地址:https://www.cnblogs.com/wangfantasy/p/3437962.html
Copyright © 2011-2022 走看看