java线程跟多线程

java创建线程两种方式:

1.继承Thread创建线程

/**
 * Created by lsf on 16/4/18.
 */
class NewThread extends Thread {
    NewThread(){
        super();    //创建线程
        start();    //启动线程
    }

    public void run() {
        long starttime = System.currentTimeMillis();
        System.out.println("child thread..."+starttime);
    }
}

class CurrentThreadDemo {
    public static void main(String args[]) {
        long starttime2 = System.currentTimeMillis();
        System.out.println("main thread,,,"+starttime2);    //主线程
        new NewThread();
        System.out.println("住县城");
    }
}

2.实现

import com.sun.tools.internal.xjc.reader.xmlschema.bindinfo.BIConversion;

import java.util.Date;

/**
 * Created by lsf on 16/4/18.
 */
class NewThread extends Thread {
    NewThread(){
        Thread t = new Thread(this);    //创建线程
        t.start();                      //启动线程
    }

    public void run() {
        long starttime = System.currentTimeMillis();
        System.out.println("child thread..."+starttime);
    }
}

class CurrentThreadDemo {
    public static void main(String args[]) {
        long starttime2 = System.currentTimeMillis();
        System.out.println("main thread,,,"+starttime2);
        new NewThread();
        System.out.println("主线程");  //主线程
    }
}

3.给任务创建多个线程去执行

class NewThread extends Thread {
    String name;
    NewThread(String threadname){
        name = threadname;
        Thread t = new Thread(this,threadname);    //创建线程
        t.start();                      //启动线程
    }

    public void run() {
        long starttime = System.currentTimeMillis();
        System.out.println("child thread..."+name);
    }
}

class CurrentThreadDemo {
    public static void main(String args[]) {
        long starttime2 = System.currentTimeMillis();
        System.out.println("main thread,,,"+starttime2);
        new NewThread("demo1");
        new NewThread("demo2");
        new NewThread("demo3");
        System.out.println("主线程");  //主线程
    }
}

4.线程优先级设置

/**
 * Created by lsf on 16/4/22.
 */

class ThreadTest implements Runnable {

    Thread t;
    int count = 0;
    private volatile Boolean flag = true;

    public ThreadTest(int p) {
        t = new Thread(this);
        t.setPriority(p);
    }

    public void start(){
        t.start();
    }

    public void finish(){
        flag = false;
    }

    @Override
    public void run() {
        while(flag){
            count++;
        }
    }

}

public class ThreadPriority {
    public static void main(String[] args) {
        ThreadTest t1 = new ThreadTest(Thread.NORM_PRIORITY - 2);
        ThreadTest t2 = new ThreadTest(Thread.NORM_PRIORITY + 2);
        t1.start();
        t2.start();
        t1.finish();
        t2.finish();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        try {
            System.out.println("t1 count:"+t1.count);
            System.out.println("t2 count:"+t2.count);
            t1.t.join();
            t2.t.join();
            System.out.println("t1 is alive:" + t1.t.isAlive());
            System.out.println("t2 is alive:" + t1.t.isAlive());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

5.线程同步

线程同步的关键在于同一时刻线程在管程内,应用场景一般是:当某个方法(callme)需要用多线程去执行,可以改造一下对应的方法,加上关键词synchronized,这样在调用过程中,每个线程都会默认进入隐式管程。

/**
 * Created by root on 16-4-15.
 */

class Callme {
    synchronized void call(String msg){
        System.out.println("["+msg);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("]");
    }
}

class ThreadCaller implements Runnable{

    String msg;
    Callme target;
    Thread t;

    public ThreadCaller(Callme targ,String s) {
        target = targ;
        msg = s;
        t = new Thread(this);
        t.start();
    }

    @Override
    public void run() {
        target.call(msg);
    }
}

class Demo {
    public static void main(String[] args) {
        Callme target = new Callme();
        ThreadCaller obj1 = new ThreadCaller(target,"Hello");
        ThreadCaller obj2 = new ThreadCaller(target,"Synchronized");
        ThreadCaller obj3 = new ThreadCaller(target,"World");

        try {
            obj1.t.join();
            obj2.t.join();
            obj3.t.join();
        } catch (InterruptedException e) {
            System.out.println("Interrupted");
        }
    }
}

  

时间: 2024-10-10 17:35:08

java线程跟多线程的相关文章

Java线程及多线程技术及应用

第6 章 Java线程及多线程技术及应用 6.1线程基本概念 1.进程和线程的基础知识 l 进程:运行中的应用程序称为进程,拥有系统资源(cpu.内存) l 线程:进程中的一段代码,一个进程中可以哦有多段代码.本身不拥有资源(共享所在进程的资源) 在java中,程序入口被自动创建为主线程,在主线程中可以创建多个子线程. 区别: 1.是否占有资源问题 2.创建或撤销一个进程所需要的开销比创建或撤销一个线程所需要的开销大. 3.进程为重量级组件,线程为轻量级组件 l 多进程: 在操作系统中能同时运行

JAVA线程与多线程

去安卓面试的时候通常会问一些java问题,所以呢你可能觉得答问题时答案很蛋疼,今天来介绍一下线程. 先看几个概念: 线程:进程中负责程序执行的执行单元.一个进程中至少有一个线程. 多线程:解决多任务同时执行的需求,合理使用CPU资源.多线程的运行是根据CPU切换完成,如何切换由CPU决定,因此多线程运行具有不确定性. ● 线程 java中的线程 使用java.lang.Thread类或者java.lang.Runnable接口编写代码来定义.实例化和启动新线程. 一个Thread类实例只是一个对

Java线程与多线程教程

本文由 ImportNew - liken 翻译自 Journaldev. Java线程是执行某些任务的轻量级进程.Java通过Thread类提供多线程支持,应用可以创建并发执行的多个线程. 应用中有两类线程——用户线程和守护线程.当启动应用时,main线程是创建的第一个用户线程,我们可以创建多个用户线程和守护线程.当所有用户进程执行完毕时,JVM终止程序. 可以对不同的线程设置不同的属性,但并不保证高优先级的线程在低优先级线程之前执行.线程调度器是操作系统的部分实现,当一个线程启动后,它的执行

Java线程和多线程(十五)——线程的活性

当开发人员在应用中使用了并发来提升性能的同一时候.开发人员也须要注意线程之间有可能会相互堵塞. 当整个应用运行的速度比预期要慢的时候,也就是应用没有依照预期的运行时间运行完成.在本章中.我们来须要细致分析可能会影响应用多线程的活性问题. 死锁 死锁的概念在软件开发人员中已经广为熟知了,甚至普通的计算机用户也会常常使用这个概念.虽然不是在正确的状况下使用.严格来说,死锁意味着两个或者很多其它线程在等待还有一个线程释放其锁定的资源,而请求资源的线程本身也锁定了对方线程所请求的资源. 例如以下: Th

Java线程及多线程技术及应用(二)

5线程同步互斥 1.线程同步互斥的一个示例 多个线程同时访问或操作同一资源时,很容易出现数据前后不一致的问题.请看下面的例子: 男孩拿着折子去北京银行海淀分行取钱 女孩拿着男孩的银行卡去西单百货疯狂购物 男孩走到柜台钱询问帐户余额 银行的业务员小姐亲切地告诉他:"您还有10000元!". 女孩看上了一件时髦的衣裳,准备买下 男孩在思考要取多少钱呢? 女孩到收银台准备刷卡消费 收银台刷卡机读取银行卡余额为10000元 女孩买衣服刷卡消费5000元 消费清单打印出来,消费:5000元  余

Java线程及多线程技术及应用(一)

1线程基本概念 1.进程和线程的基础知识 进程:运行中的应用程序称为进程,拥有系统资源(cpu.内存) 线程:进程中的一段代码,一个进程中可以哦有多段代码.本身不拥有资源(共享所在进程的资源) 在java中,程序入口被自动创建为主线程,在主线程中可以创建多个子线程. 区别: 1.是否占有资源问题 2.创建或撤销一个进程所需要的开销比创建或撤销一个线程所需要的开销大. 3.进程为重量级组件,线程为轻量级组件 3.多进程: 在操作系统中能同时运行多个任务(程序) 4.多线程: 在同一应用程序中有多个

java 多线程(0) Java线程

线程 线程是系统调度的基本单元,每当创建一个进程时,会有许多的线程,也叫轻量级进程,在一个进程中拥有多个线程,各自都有自己的计数器,堆和局部变量属性,并且能够分享内存变量. 为什么要使用多线程  1.更多的处理器核心 2.更快的响应时间 3.更好的编程模型 优先级 线程优先级决定了线程需要多或少分配一些处理器资源的线程属性,通过priority来控制优先级,范围从1-10,在线程构建SetPriority(int)方法来修改优先级,默认为5. 线程的运行状态 状态名称 说明 NEW 初始状态,线

Java的线程和多线程教程

Java线程(Java Thread)是执行某些任务的一种轻量级进程.Java中的Thread类提供了多线程(multi-threading)功能,应用程序能够创建多个线程并同一时候执行. 在一个应用程序中,一般会有两种类型的线程-用户线程(user thread)和守护线程(daemon thread).当我们启动引用程序时,首先创建用户线程main,我们能够创建多个用户线程和守护线程.当全部的用户线程都运行完成时,JVM就会终止程序. 对不同的线程,我们能够设置对应的优先级,但并不意味着高优

【多线程】Java线程面试题 Top 50(转载)

Java线程面试题 Top 50 原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入Java小组.转载请参见文章末尾的要求. 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程