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");
}
}
}

  

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

  1. Java线程与多线程教程

    本文由 ImportNew - liken 翻译自 Journaldev.   Java线程是执行某些任务的轻量级进程.Java通过Thread类提供多线程支持,应用可以创建并发执行的多个线程. 应用 ...

  2. Java线程和多线程(十三)——Callable,Future,FutureTask

    在Java多线程之中,Callable和Future的使用时非常广泛的.在之前的文章中,我们了解了关于Java线程池基础的一些内容,知道如何提交Runnable的任务.但是,Runnable的任务是无 ...

  3. Java线程和多线程(十二)——线程池基础

    Java 线程池管理多个工作线程,其中包含了一个队列,包含着所有等待被执行的任务.开发者可以通过使用ThreadPoolExecutor来在Java中创建线程池. 线程池是Java中多线程的一个重要概 ...

  4. Java线程和多线程(三)——线程安全和同步

    线程安全在Java中是一个很重要的课题.Java提供的多线程环境支持使用Java线程.我们都知道多线程共享一些对象实例的话,可能会在读取和更新共享数据的事后产生数据不一致问题. 线程安全 之所以会产生 ...

  5. Java线程和多线程(一)——线程的基本概念

    Java 线程是一个轻量级执行任务的处理单元.Java提供了Thread类来支持多线程,开发者在应用中可以创建多个线程来支持并发执行任务. 在应用中存在两种类型的线程,用户线程和守护线程.当我们启动应 ...

  6. Java 线程与多线程

    Java是一门支持多线程的编程语言! 什么是进程? 计算机中内存.处理器.IO等资源操作都要为进程进行服务. 一个进程上可以创建多个线程,线程比进程更快的处理单元,而且所占用的资源也小,多线程的应用也 ...

  7. Java线程和多线程(八)——Thread Dump

    Java的Thread Dump就是列出JVM中所有激活状态的线程. Java Thread Dump Java Thread Dump在分析应用性能瓶颈和死锁的时候,是非常有效的. 下面将介绍多种不 ...

  8. Java 线程和多线程执行过程分析

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

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

    当开发者在应用中使用了并发来提升性能的同时,开发者也需要注意线程之间有可能会相互阻塞.当整个应用执行的速度比预期要慢的时候,也就是应用没有按照预期的执行时间执行完毕.在本章中,我们来需要仔细分析可能会 ...

随机推荐

  1. 转载:《TypeScript 中文入门教程》 4、类

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 传统的JavaScript程序使用函数和基于原型的继承来创建可重用的组件,但这对 ...

  2. html5 video

    先简要概述一下video标签: video:嵌入视频到页面中 1. 声明video标签 单个视频的时候使用src: <video src="http://v2v.cc/~j/theor ...

  3. 利用CSS3实现图片无间断轮播图的实现思路

    前言:图片轮播效果现在在各大网站都是非常普遍的,以前我们都是通过postion的left or right来控制dom的移动,这里我要说的是利用css3来制作轮播!相比以前通过postion来移动do ...

  4. HotApp小程序统计之自定义事件统计

    什么是自定义事件统计     官网:https://weixin.hotapp.cn/document 自定事件,就是自定统计任意事件的执行,灵活度最高. 用上图的云笔记说明想知道如下信息 (1)多少 ...

  5. VS的安装

    一 安装过程 我直接在官网下载的 2015版本 ,软件比较大 安装起来比较花时间 同时也装了中文语言包,下面附上安装过程中的一些截图. 二 现在正在摸索如何使用,百度教程,等会附上单元测试.

  6. git rebase与 git合并(error: failed to push some refs to)解决方法

    1.遇到的问题 本地有一个git仓库,在github上新建了一个空的仓库,但是更新了REWADME.md的信息,即在github上多了一个提交. 关联远程仓库,操作顺序如下: git remote a ...

  7. MySQL备份还原——mysqldump工具介绍

    mysqldump是一款MySQL逻辑备份的工具,他将数据库里面的对象(表)导出成SQL脚本文件.有点类似于SQL SEVER的"任务-生成脚本"的逻辑备份功能.mysqldump ...

  8. Java虚拟机栈

    Java Virtual Machine Stacks,线程私有,生命周期与线程相同,描述的是Java方法执行的内存模型:每一个方法执行的同时都会创建一个栈帧(Stack Frame),由于存储局部变 ...

  9. 在Ubuntu上单机安装Hadoop

    最近大数据比较火,所以也想学习一下,所以在虚拟机安装Ubuntu Server,然后安装Hadoop. 以下是安装步骤: 1. 安装Java 如果是新机器,默认没有安装java,运行java –ver ...

  10. YARN与MRv1的对比

    YARN与MRv1的对比 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop 1.0存在的问题 由于Hadoop 1.0的良好特性,Hadoop 1.0被应用到 ...