请教一个JAVA的基础问题

有如下的一个接口,叫做:GenericDao,有几点不理解:
1、虽然知道E,K,V都是泛型,但是一直不太理解有什么用,比如:>这段代码有什么用,实现什么功能?如果不写会有什么影响?
2、为什么在类的定义中还可以extends,一般不都是 class A1 extends A,这么写么?为什么可以class A1

 package com.patsnap.common.bean;

import com.patsnap.common.entity.DBVersionEntity;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.io.Serializable;

/**
 * Author:  shenyineng
 * Date:    9/25/15.
 */
public interface GenericDao<K extends Serializable, E extends DBVersionEntity<K>> {
    /**
     * Get target entity by id
     *
     * @param id specified id
     * @return specified entity
     */
    E get(@Valid @NotNull K id);

    /**
     * Save a entity
     *
     * @param entity specified entity
     */
    void save(@Valid @NotNull E entity);

    /**
     * Delete a specified entity
     *
     * @param entity specified entity
     */
    void delete(E entity);

    /**
     * Delete a target entity by its id
     *
     * @param id specified id
     */
    void delete(@Valid @NotNull K id);
}

希望谁能帮忙解答一下,多谢。

GenericDao是一个接口,并且是一个泛型接口,因为其定义时,在GenericDao后面有<>。<>中的K、E表示某种类型,但是只有到使用的时候才知道是什么类型。
如果<>中仅仅是,那么K、E可以是任何类型,但是实际上有时我们只希望K、E是一些有限制的类,比如某个类的子类等。
问题中但GenericDao泛型接口定义就是对K、E有限制,要求K是Serializable类的任何子类,E是DBVersionEntity类的任何子类。
如果不这么写,别人在使用GenericDao接口的时候,可以将任何类型用到这个接口的实现中,造成代码出错。

package cn.itcast_08;

public class SellTicket implements Runnable {
// 定义100张票
private int tickets = 100;

// @Override
// public void run() {
// while (true) {
// // t1,t2,t3三个线程
// // 这一次的ti......
答案就在这里:Java基础----一个有问题的多线程程序
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

泛型的主要作用是校验数据的安全性,很多java开发者认为泛型主要是起到通配符的作用,这一点上很多人有误解的,建议去深入了解java泛型