假设一个项目拥有三块独立代码块,需要执行,什么时候用多线程?

这些代码块某些时候需要同时运行,彼此独立,那么需要用到多线程操作更快。。。

这里把模板放在这里,需要用的时候寻找合适的来选用。

总体分为两种:

一、使用匿名内部类的方式(推荐)

1)方式1开启多线程(Thread)

//使用第一种方式,开启线程
new Thread()
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"线程方式1"+ i);
} }
}.start();

2)方式2内部开启线程(Runnable)

//使用第二种方式,开启线程
Runnable r =new Runnable()
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".....方式2++"+ i);
}
}
}; //不可或缺
new Thread(r).start();

二、通过在外部定义类,类的实例化开启线程

3)使用第三种方式,类实例化开启线程(继承方式)

类定义:

class ThreadTest extends Thread
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".....类的方式(extends)----"+ i);
}
} }

主函数中调用:

//使用第三种方式,类实例化开启线程(继承方式)
new ThreadTest().start();

4)使用第四种方式,类实例化开启线程(实现方式)

类定义:

class  RunnableTest implements Runnable
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".........类的方式(implements)----++"+ i);
}
}
}

主函数调用:

 //使用第四种方式,类实例化开启线程(实现方式)
new Thread(new RunnableTest()).start();

附测试代码:

 class ThreadUseDemo
{
public static void main(String[] args)
{
//System.out.println("Hello World!");
//使用第一种方式,开启线程
new Thread()
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"线程方式1"+ i);
} }
}.start();
//主线程在这里运行
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+"前台线程"+ i);
} //使用第二种方式,开启线程
Runnable r =new Runnable()
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".....方式2++"+ i);
}
}
}; //不可或缺
new Thread(r).start(); //使用第三种方式,类实例化开启线程(继承方式)
new ThreadTest().start();
//使用第四种方式,类实例化开启线程(实现方式)
new Thread(new RunnableTest()).start();
}
} class ThreadTest extends Thread
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".....类的方式(extends)----"+ i);
}
} }
class RunnableTest implements Runnable
{
public void run()
{
for(int i=0;i<100;i++)
{
System.out.println(Thread.currentThread().getName()+".........类的方式(implements)----++"+ i);
}
}
}

ThreadUseDemo .java

线程学习告一段落了,之后关于线程其他的知识点,这里记下笔记,用的时候再说:

1)线程停止

通过在主函数中控制标志位来中止子线程的循环状态,特殊情况:

当现场处于冻结状态(wait)时,就读取不到flag标记,那么线程就不会结束。解决办法:

Interrupt:清楚冻结状态,当然此时会抛异常,在异常中更改标志位即可

wait  ---

sleep ----===》一砖头下去---》清醒(运行态)抛异常->有人强制结束,可以获取运行资格,操作标记为false,循环判断为假,线程结束

2) 守护线程

eg:   t1.setDaemon(true);//此时t1线程为守护线程,开启后和前台线程共同运行,互抢CPU资格,但当主线程(前台)结束后,守护线程也自动停止(依赖于前台主线程)

3) join()

eg:  t1.start();t1.join();//t1在start后,join表示向CPU申请执行权(CPU交出,处于wait状态),t1和其他正在运行的线程一起争夺,直到t1结束后交还资格给CPU

4) 线程组:谁开启的线程,就属于某个组(几乎用不到)

5)线程优先级:1--10,默认为5,经常用得到有:MIN_PRIORITY (1);MAX_PRIORITY (10); NORM_PRIORITY (5 )

定义:

这是java线程的优先级:
java.lang.Thread
public static final int MAX_PRIORITY 10
public static final int MIN_PRIORITY 1
public static final int NORM_PRIORITY 5

使用:

 //第一种方案
class MyThead implements Runnable
{
public void run()
{
for (int i = 1; i <= 10; i++)
{
System.out.println(Thread.activeCount() + "thread======>AAA");
}
}
}
//第二种方案
class MyThreadRunnable extends Thread
{ public void run()
{
for (int i = 1; i <= 10; i++)
{
System.out.println(Thread.activeCount() + "thread======BBB");
}
} } public class TheadMain
{
public static void main(String[] args)
{
MyThead myThead = new MyThead();
Thread thread = new Thread(myThead);
MyThreadRunnable thread2 = new MyThreadRunnable();
thread.start();
thread.setPriority(Thread.MIN_PRIORITY);
thread2.start();
thread2.setPriority(Thread.MAX_PRIORITY);
}
}

  

java多线程四种实现模板的更多相关文章

  1. Java基础:Java的四种引用

    在Java基础:java虚拟机(JVM)中,我们提到了Java的四种引用.包括:强引用,软引用,弱引用,虚引用.这篇博客将详细的讲解一下这四种引用. 1. 强引用 2. 软引用 3. 弱引用 4. 虚 ...

  2. Java的四种内部类

    Java的四种内部类包括如下: 成员内部类 静态内部类 局部内部类 匿名内部类 成员内部类: 定义在另一个类(外部类)的内部,而且与成员方法和属性平级叫成员内部类,......相当于外部类的非静态方法 ...

  3. Java中四种引用:强、软、弱、虚引用

    这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...

  4. java中四种引用类型

    java中四种引用类型  今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在 ...

  5. java 多线程四

    java 多线程一 java 多线程二 java 多线程三 java 多线程四 一个生产者,消费者的例子: import java.util.Stack; /** * Created by root ...

  6. Java的四种内部类(含代码实例)

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  7. Java的四种引用类型之弱引用

    先说结论: 首先,Java中有四种引用类型:强引用.软引用.弱引用.虚引用.-- 在 Java 1.2 中添加的,见 package java.lang.ref; . 其次,这几个概念是与垃圾回收有关 ...

  8. java中四种引用类型(对象的强、软、弱和虚引用)

    对象的强.软.弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2 ...

  9. java 基础 四种权限修饰符

    /** * Java有四种权限修饰符: * public > protected > (default) > private * 同一个类 YES YES YES YES * 同一个 ...

随机推荐

  1. C socket post数据到url

    #define HOST_SERVER_IP "192.168.1.15" #define HOST_PORT 80 int gsh_post_clients(const char ...

  2. LPC1788做U盘的时候对命令的响应

    首先是对于端点的数据处理 #ifndef __USBEP2_H_ #define __USBEP2_H_ #include "usb.h" #include "usbhw ...

  3. 在JSP里使用CKEditor和CKFinder

    在JSP里使用CKEditor和CKFinder 最 近在做一个新闻发布平台,放弃了很早的FCKEditor,使用CKEditor和CKFinder,尽管免费的CKFinder是Demo版本,但是功 ...

  4. [MySQL]mysql指定路径启动

    /usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf --basedir=/usr --datadir=/var/lib/mysql --pid-fil ...

  5. 使用Emacs中的org-mode写cnblogs之图片插入

    .title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium ...

  6. 安装ARM交叉编译器

    1.开发平台 虚拟机:VMware 12 操作系统:Ubuntu 14.04 64bit 2.准备ARM交叉编译工具包 编译uboot和linux kernel都需要ARM交叉工具链支持,这里使用Li ...

  7. 数字(数学)操作类 Math Random 类 ,大数字操作类

    Math 提供了大量的数学操作方法 Math类中所有的方法都是static 方法

  8. Leetcode 181. Employees Earning More Than Their Managers

    The Employee table holds all employees including their managers. Every employee has an Id, and there ...

  9. JAVA WEB 中的编码分析

    JAVA WEB 中的编码分析 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src {background-co ...

  10. UVa 10341 - Solve It

    题目:给一个方程,求解方程的解.已给出解的范围,并且可知方程等号左侧的函数是递减的,可用二分法进行试探,直到得出给定误差范围内的解. #include <cstdio> #include ...